方法一:数学方法求解
求和公式
转化为一元二次方程
再有求根公式得
(另一个x小于零舍去)
将x取整就会得到完整的阶梯行数
代码如下:
class Solution {
public int arrangeCoins(int n) {
return (int)((Math.sqrt((long)8*n+1)-1)/2);
}
}
方法二:暴力求解
将元素一个一个的试,当它排列不满一行时输出具有完整元素的行数。
class Solution {
public int arrangeCoins(int n) {
int i = 1;
while(n>=i)
{
n-=i++;
}
return i-1;
}
}
方法三:二分查找法
class Solution {
public int arrangeCoins(int n) {
int l = 1,r = n;
while(l<r)
{
int mid = (r-l+1)/2+l;
if((long)mid*(mid+1)<=(long)2*n)
{
l=mid;
}
else
{
r=mid - 1;
}
}
return l;
}
}