思路:
对于按阶梯排列的硬币,它的行数k与完整排列需要的硬币总数t之间满足等差数列
t=k*(K+1)/2
我们可以通过二分查找,计算n枚硬币形成的完整阶梯行的行数。
代码:
class Solution {
public:
int arrangeCoins(int n) {
int l=1,r=n;
while(l<=r){
int mid=l+(r-l)/2;
if((long)mid*(mid+1)<=(long)n*2){
l=mid+1;
}
else{
r=mid-1;
}
}
return l-1;
}
};