【Leetcode】python - [228] Summary Ranges 個人解法筆記

題目出處

228. Summary Ranges

難度

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

見上述說明

Reference