思路:哈希+遍历+取数位
1~9可以对应盒子
那么10、11、12如何对应到1、2、3呢?
通过下面这个就可以得到啦。举例n=10,pos += 0 , n/=10 = 1, pos += 1%10 = 1, n/10 = 0结束循环,即pos = 1,即10映射到1啦。12、13、xx同理
for n != 0 {
pos += n%10
n /= 10
}
此时用map记录一下pos就可以了。map[pos]++。 每次循环可以取当前map的最大值,即ans = max(ans, map[pos])
- func countBalls(lowLimit int, highLimit int) int {
- has1 := make(map[int]int,0)
- ans := 0
- for i:=lowLimit;i<=highLimit;i++{
- pos := 0
- n := i
- for n != 0 {
- pos += n%10
- n/=10
- }
- has1[pos]++
- ans = max(ans, has1[pos])
- }
- return ans
- }
- func max(a, b int) int {
- if a > b {
- return a
- }
- return b
- }