【Leetcode】【python】Arranging Coins
阿新 • • 發佈:2019-02-16
Arranging Coins
標準答案程式碼來自書影部落格
題目大意
你有n枚硬幣,想要組成一個階梯形狀,其中第k行放置k枚硬幣。
給定n,計算可以形成的滿階梯的最大行數。
n是非負整數,並且在32位帶符號整數範圍之內。
解題思路
數學方法
每行想填滿需要k*(k+1)/2個硬幣
二分列舉答案(Binary Search)
其實還是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(體現在速度巨慢),主要學習的是二分法。
看了一個二分法詳解可以有空多看看。