原题
题解
方法一
由于从1加到你m的公式是m(m+1)/2,令该式等于n,用二次函数的求根公式,再把结果正数取整就行了。
本思路java代码示例:
/*注意不要超范围
*作者@v7fgg
*执行用时 :1 ms, 在所有 Java 提交中击败了100.00%的用户
*内存消耗 :37.1 MB, 在所有 Java 提交中击败了16.67%的用户
*2020年5月25日 8:45
*/
class Solution {
public int arrangeCoins(int n) {
//int ans=(int)((Math.sqrt(8*n+1)-1)/2.0);超范围了
int ans=(int)((Math.sqrt(0.5*n+0.0625)-0.25)/0.5);
return ans;
}
}
方法二
从1开始顺序累加自然数,加到大于等于目标值时判断自然数的大小。但要注意测试例里面有一个Integer.max,因此我们再表示累加和的时候要用long类型的。
本思路java代码示例:
/*注意不要超范围
*作者@v7fgg
*执行用时 :12 ms, 在所有 Java 提交中击败了12.88%的用户
*内存消耗 :36.8 MB, 在所有 Java 提交中击败了16.67%的用户
*2020年7月2日 19:28
*/
class Solution {
public int arrangeCoins(int n) {
int i=1;
long he=0;//attention
while(he<=n){
he+=i;
i++;
}
return i-2;
}
}