1. 程式人生 > >【Leetcode】【python】Arranging Coins

【Leetcode】【python】Arranging Coins

Arranging Coins

標準答案程式碼來自書影部落格

題目大意

你有n枚硬幣,想要組成一個階梯形狀,其中第k行放置k枚硬幣。
給定n,計算可以形成的滿階梯的最大行數。
n是非負整數,並且在32位帶符號整數範圍之內。

解題思路

數學方法

每行想填滿需要k*(k+1)/2個硬幣

其實還是k*(k+1)/2的思路啊

程式碼

數學方法

class Solution(object):
    def arrangeCoins(self, n):
        k = 0
        while k*(k+1
)/2 <= n: k += 1 return k-1

二分列舉答案(Binary Search)

class Solution(object):
    def arrangeCoins(self, n):
        """
        :type n: int
        :rtype: int
        """
        l, r = 0, n
        while l <= r:
            m = (l + r) / 2
            if m * (m + 1) / 2 > n:
                r = m - 1
else: l = m + 1 return r

我提交的

class Solution(object):
    def arrangeCoins(self, n):
        """
        :type n: int
        :rtype: int
        """
        total = 0
        row = 1
        if n == 0:
            return 0
        if n == 1:
            return 1
while True: if n - total < row: return row - 1 elif n - total == row: return row else: total += row row += 1

總結

題目較為簡單,思路都大同小異,我的解法還是比較2B(體現在速度巨慢),主要學習的是二分法。
看了一個二分法詳解可以有空多看看。