思路
找规律:
1.顺着想:
class Solution {
public:
int arrangeCoins(int n) {
int result;
int item=1;//每一层末尾的数
int i=2;//层数
if(n==1) return 1;
while(true){
if(n<=item) break;
item=i*(i+1)/2;//当前层的最后一位数
//cout<<item;
i++;//下一层的层号
//cout<<i;
}
return (n==item?i-1:i-2);
}
};
但是最后报错了,因为当数字很大的时候会溢出。
2.逆着想:直接由所给的数求出当前的行数
利用公式解一下方程。
class Solution {
public:
int arrangeCoins(int n) {
return int(sqrt(2)*sqrt(n+1.0/8)-0.5);
}
};
注意这里在写sqrt的时候,如果写成了sqrt(2*n+0.25)时同样有溢出错误。所以提2出来。
语法
写死循环的语法是
while(true)
{
....
}