目录
- 题目截图
- 题目分析
- ac code
- 总结
题目截图
题目分析
- 样例有规律,它希望我们先按每层1, 3, 6这样叠起来,比如能跌i层
- 那么至少有i * ( i + 1) // 2个底层
- 多出来的东西再做考虑
- 多出来的东西考虑1 + 2 + 3…能加到多少个
- 比如说如果多出来3个的话,放2个就ok了
- 多出来4个的话,需要放3个
- 多出来5个,也是放3个
- 多出来6个,还是3个
- 多出来7个,就要4个了
- 所以还是以1,3,6作为分界点即可
- 假设底层放j个可以满足剩下的
- 最后答案就是i * ( i + 1) // 2 + j
ac code
class Solution:
def minimumBoxes(self, n: int) -> int:
cur = i = j = 1
while n > cur:
n -= cur
i += 1
cur += i
cur = 1
while n > cur:
n -= cur
j += 1
cur += 1
return (i - 1) * i // 2 + j
总结
- 找规律啊!
- 第一个规律好看
- 第二个的话,自己枚举一下就ok了!