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