【LeetCode 簡單題】99-排列硬幣
阿新 • • 發佈:2018-11-19
宣告:
今天是第99道題。你總共有 n 枚硬幣,你需要將它們擺成一個階梯形狀,第 k 行就必須正好有 k 枚硬幣,返回k。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除
(手動比心ღ( ´・ᴗ・` ))
正文
題目:你總共有 n 枚硬幣,你需要將它們擺成一個階梯形狀,第 k 行就必須正好有 k 枚硬幣。給定一個數字 n,找出可形成完整階梯行的總行數。n
示例 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:原創