# 字典
# 首先建立一个空字典,然后对所有小球进行循环,
# 并依次添加到字典中,最后输出最值即可。
class Solution:
def countBalls(self, lowLimit: int, highLimit: int) -> int:
balls_dict = {}
for i in range(lowLimit, highLimit + 1):
num = 0
for j in str(i):
num += int(j)
if num not in balls_dict:
balls_dict[num] = 1
else:
balls_dict[num] += 1
return max(balls_dict.values())
方法二:哈希表
思路:思路和上面一致,不同在于字典的高级写法。
# 哈希表
# 思路和上面一致,不同在于字典的高级写法
class Solution:
def countBalls(self, lowLimit: int, highLimit: int) -> int:
balls_dict = Counter(sum(map(int, str(i))) for i in range(lowLimit, highLimit + 1))
return max(balls_dict.values())
方法三:数学法
思路:首先定义一个列表,球的编号每10个是一组循环。按照此规律依次更新列表即可。
# 数学法
# 首先定义一个列表,球的编号每10个是一组循环。
# 按照此规律依次更新列表即可。
class Solution:
def countBalls(self, lowLimit: int, highLimit: int) -> int:
ans = 0
balls = [0] * 50
for i in range(lowLimit, highLimit + 1):
j, cur = i, 0
while j != 0:
j, cur = j // 10, cur + j % 10
balls[cur] += 1
if balls[cur] > ans:
ans = balls[cur]
return ans