Maximum Number of Balls in a Box
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| class Solution:
def countBalls(self, lowLimit: int, highLimit: int) -> int:
box_counts = {}
# generate all the balls
balls = list(range(lowLimit, highLimit+1))
# for each ball
for ball in balls:
# convert the ball number into a string
str_ball = str(ball)
# initialize the box number to 0
box = 0
# for each digit in the string representation of the ball number
for digit in str_ball:
# add the digit (converted back to an integer) to the box number
box += int(digit)
# if this box already has some balls
if box in box_counts:
# increment the count of balls in this box
box_counts[box] += 1
else:
# this box is encountered the first time, so initialize the count of balls in it to 1
box_counts[box] = 1
# after all balls have been put in their boxes, find the box with the maximum number of balls
max_balls = max(box_counts.values())
return max_balls
|
1
2
3
4
5
6
7
8
9
10
11
| class Solution:
def countBalls(self, lowLimit: int, highLimit: int) -> int:
cnt = [0] * 46
for i in range(lowLimit, highLimit + 1):
n = i
_sum = 0
while n > 0:
_sum += n % 10
n //= 10
cnt[_sum] += 1
return max(cnt)
|
In this code, we first initialize a list cnt
of 46 zeros. Then we iterate over the range from lowLimit
to highLimit
inclusive. For each number i
in this range, we calculate the sum of its digits (_sum
). To get each digit of i
, we use the modulo operation (n % 10
), and then we do integer division by 10 (n //= 10
) to remove the last digit. After the sum of digits is calculated, we increment the corresponding element in the cnt
list. Finally, we return the maximum value from the cnt
list, which is the box with the most balls.