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.
Example 1:
n = 5
The coins can form the following rows:
¤
¤ ¤
¤ ¤
Because the 3rd row is incomplete, we return 2.
Example 2:
n = 8
The coins can form the following rows:
¤
¤ ¤
¤ ¤ ¤
¤ ¤
Because the 4th row is incomplete, we return 3.
题意很简单,就是一个简单的等比数列求和问题
代码如下:
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <string>
#include <climits>
#include <algorithm>
#include <sstream>
#include <functional>
#include <bitset>
#include <cmath>
using namespace std;
class Solution
{
public:
/*
1 + 2 + 3 + ... + x = n
-> (1 + x)x / 2 = n
->x ^ 2 + x = 2n
->x ^ 2 + x + 1 / 4 = 2n + 1 / 4
-> (x + 1 / 2) ^ 2 = 2n + 1 / 4
-> (x + 0.5) = sqrt(2n + 0.25)
->x = -0.5 + sqrt(2n + 0.25)
*/
int arrangeCoins(int n)
{
return floor(-0.5 + sqrt((double)2 * n + 0.25));
}
};