题目描述
你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币。
给定一个数字 n,找出可形成完整阶梯行的总行数。
n 是一个非负整数,并且在32位有符号整型的范围内。
示例 1:
n = 5
硬币可排列成以下几行:
¤
¤ ¤
¤ ¤
因为第三行不完整,所以返回2.
示例 2:
n = 8
硬币可排列成以下几行:
¤
¤ ¤
¤ ¤ ¤
¤ ¤
因为第四行不完整,所以返回3.
解题思路
暴力法:通过一个循环,若恰好满足则输出i,超过了n则不足一行,输出i-1
数学方法:第k行有k个硬币,则检查剩下的硬币n能否满足第i行的硬币即可
代码
//暴力法
int arrangeCoins(int n){
if(n==0)return 0;
for(int i=1;i<=n;i++){
if((long)(1+i)*i/2==(long)n)return i;
else if((long)(1+i)*i/2>(long)n)return i-1;
}
return -1;
}
//数学方法
int arrangeCoins(int n){
int re=0;
for(int i=1;i<=n;i++){
re++;
n-=i;
}
return re;
}