Leetcode: 441. Arranging Coins排列硬币
问题描述
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
¤
¤ ¤
¤ ¤ ¤
¤ ¤
Because the 4th row is incomplete, we return 3.
题目也很好理解,硬币按照等差数列排列,对于给定数量n的硬币,问最多可以排满几行?
本题传送门:https://leetcode.com/problems/arranging-coins/
解决方案
这是一道数学题。设能够排满m行。根据等差数列求和公式,有
令N=2n,于是有
所以根号N取整之后,只能等于m或m+1。
代码如下:
class Solution {
public:
int arrangeCoins(int n) {
long int N = 2 * (long int)n;
long int res = (long int) sqrt((double)N);
return (res*res+res>N)? res-1 : res;
}
};
其中,要注意n是int类型,2倍n可能超出范围,要转换为long int避免溢出。