題目出處
難度
medium
個人範例程式碼
class Solution:
def isNStraightHand(self, hand: List[int], groupSize: int) -> bool:
if not len(hand) % groupSize == 0:
return False
counter = Counter(hand)
# print(counter.items())
for key in sorted(counter.keys()):
if counter[key] == 0:
continue
if counter[key] > 0:
num_of_cards = counter[key]
for delta_i in range(groupSize):
# print(key + delta_i)
counter[key + delta_i] -= num_of_cards
if counter[key + delta_i] < 0:
return False
return True
最近在練習程式碼本身就可以自解釋的 Coding style,可以嘗試直接閱讀程式碼理解
算法說明
先處理不整除的狀況,直接 return False
如果是整除的情況,我們先進行排序,
從小的卡片開始,往後「扣除最小卡片的數量」,
搜尋卡片的過程中,我們順便判斷剩餘的卡片數量是否大於 0,
等於 0 表示沒有剩餘,我們採取 continue 的動作。
input handling
先處理不整除的狀況,直接 return False
Boundary conditions
用 for 控制搜尋範圍