題目出處
難度
easy
個人範例程式碼
class Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
if not nums:
return nums
ans = []
tmp_ans = []
idx = 0
while(idx < len(nums)):
tmp_ans.append(nums[idx])
while idx+1 < len(nums) and nums[idx+1] == nums[idx] + 1:
idx += 1
tmp_ans.append(nums[idx])
else:
if len(tmp_ans) > 1:
s = f"{tmp_ans[0]}->{tmp_ans[-1]}"
else:
s = f"{tmp_ans[0]}"
ans.append(s)
idx += 1
tmp_ans = []
return ans
算法說明
這題難度不高,麻煩的點在於邊界處理,必須要細心,不然很容易犯錯。
採取的策略是 while-loop 「idx+1 < len(nums) and nums[idx+1] nums[idx] + 1」
要注意的點在於邊界控制 「idx+1 < len(nums)」。
另外有嘗試過 「nums[idx] nums[idx-1] + 1」,也是可行,不過更要注意邊界控制,
這例子要特別注意 「0, 1, 2」這種狀況,有可能 0 被單獨處理掉了。
最近在練習程式碼本身就可以自解釋的 Coding style,可以嘗試直接閱讀程式碼理解
input handling
沒有 input 時,return nums
Boundary conditions
見上述說明