本文最后更新于 2 分钟前,文中所描述的信息可能已发生改变。
3754. 连接非零数字并乘以其数字和 I - 力扣(LeetCode)
题目类型
#数学
解题思路
参考:这道题很简单!
示例代码
python
class Solution:
def sumAndMultiply(self, n: int) -> int:
s = 0
res = []
while n:
div, mod = divmod(n, 10)
if mod:
res.append(mod)
s += mod
n = div
ans = "".join(map(str, res[::-1]))
return s * (int(ans) if ans else 0)3755. 最大平衡异或子数组的长度 - 力扣(LeetCode)
题目类型
#哈希表 #位运算 #前缀和
解题思路
参考:这道题很简单!
示例代码
python
class Solution:
def maxBalancedSubarray(self, nums: List[int]) -> int:
ans = 0
pos = {(0, 0): -1}
xor = diff = 0
for i, x in enumerate(nums):
xor ^= x
diff += 1 if x % 2 else -1
t = (xor, diff)
if t in pos:
ans = max(ans, i - pos[t])
else:
pos[t] = i
return ans3756. 连接非零数字并乘以其数字和 II - 力扣(LeetCode)
题目类型
#前缀和
解题思路
用三个前缀和分别统计,前缀和、前缀对应数字和前缀的非零数字个数
示例代码
python
MX = 100_001
MOD = 1_000_000_007
pow10 = [1] * MX
for i in range(1, MX):
pow10[i] = (pow[i - 1] * 10) % MOD
class Solution:
def sumAndMultiply(self, s: str, queries: List[List[int]]) -> List[int]:
n = len(s)
pre = [0] * (n + 1)
pre_num = [0] * (n + 1)
pre_non_zero = [0] * (n + 1)
for i, d in enumerate(map(int, s)):
pre[i + 1] = pre[i] + d
pre_num[i + 1] = (pre_num[i] * 10 + d) % MOD if d else pre_num[i]
pre_non_zero[i + 1] = pre_non_zero[i] + (d > 0)
ans = []
for l, r in queries:
r += 1
d = pre_non_zero[r] - sum_non_zero[l]
x = pre_num[r] - pre_num[l] * pow10[d]
ans.append(x * (pre[r] - pre[l]) % MOD)
return ans3757. 有效子序列的数量 - 力扣(LeetCode)
题目类型
#DP #SOSDP #数学 #组合数学 #容斥原理
解题思路
示例代码
python
TODO