Day 27|

forrestr發表於2024-06-22

93.復原IP地址

本期本來是很有難度的,不過 大家做完 分割回文串 之後,本題就容易很多了

題目連結/文章講解:https://programmercarl.com/0093.復原IP地址.html
影片講解:https://www.bilibili.com/video/BV1XP4y1U73i/

有效 IP 地址 正好由四個整數(每個整數位於 0 到 255 之間組成,且不能含有前導 0),整數之間用 '.' 分隔。

例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 無效 IP 地址。
給定一個只包含數字的字串 s ,用以表示一個 IP 地址,返回所有可能的有效 IP 地址,這些地址可以透過在 s 中插入 '.' 來形成。你 不能 重新排序或刪除 s 中的任何數字。你可以按 任何 順序返回答案。

思考

分割問題,回溯判斷滿足條件後輸出。

class Solution:
    def restoreIpAddresses(self, s: str) -> List[str]:
        res_all = []
        path = []
        def is_valid(s, start, end):
            if start > end:
                return False
            if s[start] == '0' and start != end:  # 0開頭的數字不合法
                return False
            num = int(s[start:end+1])
            return 0 <= num <= 255
        def backtracking(s,start_index):
            if len(path) == 3:
                if is_valid(s,start_index,len(s)-1):
                    res_all.append(".".join(path)+'.'+str(s[start_index:]))
                return
            for i in range(start_index,len(s)-1):
                #print(s[start_index:i+1])
                if not is_valid(s,start_index,i):
                    break
                path.append(s[start_index:i+1])
                backtracking(s,i+1)
                path.pop()
        backtracking(s,0)
        return res_all

78.子集

子集問題,就是收集樹形結構中,每一個節點的結果。 整體程式碼其實和 回溯模板都是差不多的。

題目連結/文章講解:https://programmercarl.com/0078.子集.html
影片講解:https://www.bilibili.com/video/BV1U84y1q7Ci

90.子集II

大家之前做了 40.組合總和II 和 78.子集 ,本題就是這兩道題目的結合,建議自己獨立做一做,本題涉及的知識,之前都講過,沒有新內容。

題目連結/文章講解:https://programmercarl.com/0090.子集II.html
影片講解:https://www.bilibili.com/video/BV1vm4y1F71J