Every day a leetcode
题目来源:441. 排列硬币
解法1:模拟
使用col代表当前行数,sum计算col行组成的阶梯的硬币总数。
当退出循环时,说明sum>=n,这里分情况讨论:
- 若sum>n,说明最后一行没有满,col–
- 若sum == n,说明最后一行是满的
col即为最后的答案。
注意n的范围,sum要用long long。
代码:
/*
* @lc app=leetcode.cn id=441 lang=cpp
*
* [441] 排列硬币
*/
// @lc code=start
class Solution
{
public:
int arrangeCoins(int n)
{
int col = 0;
long long sum = 0;
while (sum < n)
{
col++;
sum += col;
}
if (n < sum)
col--;
return col;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(logn),sum从0累加到大于n,需要logn次。
空间复杂度:O(1)。