Arranging Coins

来源:互联网 发布:java 23种设计模式 编辑:程序博客网 时间:2024/06/05 06:20

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 = 5The coins can form the following rows:¤¤ ¤¤ ¤Because the 3rd row is incomplete, we return 2.

Example 2:

n = 8The coins can form the following rows:¤¤ ¤¤ ¤ ¤¤ ¤Because the 4th row is incomplete, we return 3.

int arrangeCoins(int n) {    // (k + 1) * k / 2 = n    //  k^2 + k = 2n --> k <= sqrt(2n) + 1    int k_at_most = sqrt(2)*sqrt(n) + 1;    int left = n - (k_at_most + 1) * k_at_most + n;    while(left < 0) {        --k_at_most;        left = n - (k_at_most + 1) * k_at_most + n;    }     return k_at_most;}