1. 題目
你總共有 n 枚硬幣,你需要將它們擺成一個階梯形狀,第 k 行就必須正好有 k 枚硬幣。
給定一個數字 n,找出可形成完整階梯行的總行數。
n 是一個非負整數,並且在32位有符號整型的範圍內。
示例 1:
n = 5
硬幣可排列成以下幾行:
¤
¤ ¤
¤ ¤
因爲第三行不完整,所以返回2.
示例 2:
n = 8
硬幣可排列成以下幾行:
¤
¤ ¤
¤ ¤ ¤
¤ ¤
因爲第四行不完整,所以返回3.
來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/arranging-coins
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
2. 解題
模擬法,不斷往下加
class Solution {
public:
int arrangeCoins(int n) {
int i = 1, line = 0;
long sum = 0;
while(sum < n)
{
sum += i;
++i;
++line;
}
if(sum > n)
return line-1;
return line;
}
};瀋陽人流手術價格 http://m.sysd120.com/
12 ms 8.3 MB
數學方法,解方程 等差數列求和 x(x+1)/2=nx(x+1)/2 = nx(x+1)/2=n, x=((8n+1)−1)/2x = (\sqrt{(8n+1)}-1)/2x=((8n+1)−1)/2
class Solution {
public:
int arrangeCoins(int n) {
long x = (pow(1+(long(n)<<3),0.5)-1)/2;
long sum = x*(x+1)/2;
if(sum > n)
return x-1;
return x;
}
};
0 ms 6.1 MB