排列硬币
题目描述:
你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。
给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。
示例 :
输入:n = 5
输出:2
解释:因为第三行不完整,所以返回 2 。
提示:
- 1 <= n <= 231 - 1
解法
直接的思路是遍历得到行数,或者使用一元二次方程来进行求解直接得到答案。另外,因为随着行数的增加,包含的硬币数也是单增的,所以可以使用二分来得到答案。
代码
class Solution:
def arrangeCoins(self, n: int) -> int:
for i in range(1, n + 1):
s = i * (i + 1) // 2
if s > n:
return i - 1
elif s == n:
return i
测试结果
执行用时:1160 ms, 在所有 Python3 提交中击败了 10.12% 的用户
内存消耗:15 MB, 在所有 Python3 提交中击败了 38.57% 的用户
说明
算法题来源:力扣(LeetCode)