LeetCode 441. 排列硬幣 Arranging Coins

441. 排列硬幣

題目

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

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

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

示例 1:

n = 5

硬幣可排列成以下幾行:
¤
¤ ¤
¤ ¤

因爲第三行不完整,所以返回2.

示例 2:

n = 8

硬幣可排列成以下幾行:
¤
¤ ¤
¤ ¤ ¤
¤ ¤

因爲第四行不完整,所以返回3.

思路

1)二分查找
2)數學法

代碼

class Solution {
    public int arrangeCoins(int n) {
             if (n<=0)
            return 0;

        int start =0;
        int end =n;

        while (start <= end){
            int middle = start +(end-start)/2;

            int sum = middle*(middle+1)/2;

            if (sum>n){
                end = middle-1;
            }
            else if (sum<=n){
                start = middle+1;
            }

        }
        return start-1;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章