问题描述:
You have a total of n coins that you want to form in a staircase shape, where every k-th row must have exactly k coins.
Given n, find the total number of full staircase rows that can be formed.
n is a non-negative integer and fits within the range of a 32-bit signed integer.
示例:n = 5 The coins can form the following rows: ¤ ¤ ¤ ¤ ¤ Because the 3rd row is incomplete, we return 2.
n = 8 The coins can form the following rows: ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ Because the 4th row is incomplete, we return 3.问题分析:
主要是考察了等差数列的求和公式1+2+3+4+..+n = (1+n)*n / 2.
可以有两种做法:
1.二分查找法
2.利用数学公式推导求解
以下代码给出了两种求解方式:
1.二分查找:
class Solution {
public:
int arrangeCoins(int n) {
long long left = 1,right = n, mid;
while(left <= right)
{
mid = left + (right - left) / 2;
long long temp = mid * (mid + 1) / 2;
if(temp == n) return mid;
else if(temp < n) left = mid + 1;
else right = mid - 1;
}
return left - 1;
}
};
2.数学推导:
class Solution {
public:
int arrangeCoins(int n) {
return (int) floor((-1 + sqrt(1+8L*n))/2.0);
}
};