题目链接:https://leetcode.com/problems/arranging-coins/
这个题嘛,就是第i行都有i个硬币,然后给出总的硬币数n,问最多能到第几行。
其实吧,就是等差数列之和,与n进行比较。
这题一开始我是这么想的,当l = r的时候,循环跳出来的mid就是答案。但是吧,各种卡壳。后来发现, n >= total的时候,就可以记录答案,循环跳出来的时候,最终结果就是正确答案了。但是有例外,当n=1和n=0的时候,要单独写。
int arrangeCoins(int n) {
int l = 1,r = n;
long long int total,mid;
int ans = -1;
while(l < r){
mid = l + (r - l)/2;
total = mid * (1 + mid) / 2;
if(n < total){
r = mid;
}else if(n >= total){
l = mid + 1;
ans = mid;
}
}
if(ans = -1){
if(n == 1) ans = 1;
else ans = 0;
}
return ans;
}
绕来绕去的解题过程文字,可能就我自己看懂了吧。