3099. 哈沙德数
思路:所有位上的数字相加,再判断是否能整除
Code
class Solution:
def sumOfTheDigitsOfHarshadNumber(self, x: int) -> int:
s = 0
xx = x
while x!=0:
s += x% 10
x //= 10
return s if xx % s ==0 else -1
3100. 换水问题 II
思路:他的题目描述怪怪的,不如直接看着例子。这题看用例就可以秒
Code
class Solution:
def maxBottlesDrunk(self, numBottles: int, numExchange: int) -> int:
full = numBottles
empty = 0
exchange = numExchange
res = 0
while not(full == 0 and empty < exchange) :
res += full
empty += full
full = 0
while empty >= exchange:
empty -= exchange
full += 1
exchange += 1
return res
思路:最直接的想法就是两层遍历,每次从前往后扫描,判断到A[i]==A[i+1]
的时候,就重新进行下一轮循环。不过超时了,给了两个特别长的隐藏用例应该。
那就试着优化一下,一层遍历即可,遍历到A[i]==A[i+1]
时,说明i前面都是合法的,可以构成(i+1)*i/2
个子数组。
Code
class Solution:
def countAlternatingSubarrays(self, nums: List[int]) -> int:
n = len(nums)
res = 0
i = 0
while i < n:
j = 1
c = 0
while i+j<n and (nums[i+j] + nums[i+j-1]) % 2 !=0:
j += 1
c += 1
res += (c*(c+1)//2)
if c == 0:
i += 1
else:
i += j
return res + n