Description:
ou 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.
用等差数列求和公式可以算出如果填满一个图形的话需要多少硬币。
(1+k)*k/2=n
解得k=√(2*n+1/4)-1/2
第一次写的代码如下:
class Solution {
public:
int arrangeCoins(int n) {
int k=0;
double re=sqrt(2*n+0.25);
k=floor(re-0.5);
return k;
}
};
这样的代码不能在n=1804289383时便不能通过,因为n很大时会溢出。在n前面加上double就能解决问题。 在devcpp上用一个longlong来存储2*n是没问题的,不知道为什么在leetcode上没有通过。修改版的代码如下:
class Solution {
public:
int arrangeCoins(int n) {
int k=0;
double re=sqrt(2*(double)n+0.25);
k=floor(re-0.5);
return k;
}
};