1. 程式人生 > >【LeetCode 簡單題】99-排列硬幣

【LeetCode 簡單題】99-排列硬幣

宣告:

今天是第99道題。你總共有 枚硬幣,你需要將它們擺成一個階梯形狀,第 行就必須正好有 枚硬幣,返回k。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

題目:你總共有 枚硬幣,你需要將它們擺成一個階梯形狀,第 行就必須正好有 枚硬幣。給定一個數字 n,找出可形成完整階梯行的總行數。

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

示例 1:

n = 5

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

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

示例 2:

n = 8

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

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

解法1。根據求根公式解就行了,程式碼如下

執行用時: 40 ms, 在Arranging Coins的Python提交中擊敗了96.13% 的使用者

class Solution(object):
    def arrangeCoins(self, n):
        """
        :type n: int
        :rtype: int
        """
        import math
        return int((-1+math.sqrt(1+8*n))/2)

 解法2。下面這種解法是LeetCode效率比較靠前的做法,但我沒搞懂是啥邏輯。。。

執行用時: 40 ms, 在Arranging Coins的Python提交中擊敗了96.13% 的使用者

class Solution(object):
    def arrangeCoins(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n == 0 :
            return 0
        k = int((2*n)**0.5)

        if k+k**2 <= 2*n:
            return k
        if k+k**2 > 2*n:
            return k-1

結尾

解法1:原創