1. 程式人生 > >leetcode(8)排列硬幣的js實現

leetcode(8)排列硬幣的js實現

一.題目描述:

你總共有 n 枚硬幣,你需要將它們擺成一個階梯形狀,第 k 行就必須正好有 k 枚硬幣。

給定一個數字 n,找出可形成完整階梯行的總行數。

n 是一個非負整數,並且在32位有符號整型的範圍內。

示例 1:
n = 5
硬幣可排列成以下幾行:
¤
¤ ¤
¤ ¤
因為第三行不完整,所以返回2.

示例 2:
n = 8
硬幣可排列成以下幾行:
¤
¤ ¤
¤ ¤ ¤
¤ ¤
因為第四行不完整,所以返回3.

二.js程式碼實現:

1.實現思路:

(1)第一種直接對n進行開放取整為m,對m*(m+1)/2進行判斷就好

(2)第二種方法一個變數計數,一個變數計算值的和,再進行判斷返回計數的值

2.js程式碼實現:

(1)簡單實現:

/**
 * @param {number} n
 * @return {number}
 */
var arrangeCoins = function(n) {
    let m = Math.floor(Math.sqrt(2*n));
    if(n>=m*(m+1)/2)
        {
            return m;
        }
    else 
        {
            return m-1;
        }  
};

(2)普通實現:

/**
 * @param {number} n
 * @return {number}
 */
var arrangeCoins = function(n) {
    let count = 0;
    let sum = 0;
    while(true){
     sum = sum +count+1
     if(sum > n){
         break;
     }
     count++;   
    }
    return count;
};