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)。
该文章介绍了LeetCode第441题的解决方案,使用模拟方法来计算能组成阶梯状排列的最大硬币数。在循环中增加行数(col)并累加硬币总数(sum),直到sum大于给定的硬币总数(n)。然后根据sum是否等于n来决定是否减去一行。时间复杂度为O(logn),空间复杂度为O(1)。
630

被折叠的 条评论
为什么被折叠?



