leetcode 93 復原ip位址
首先乙個正確有效的ip位址,由4個整數構成,介於0-255,也就是說每個整數長度介於1-3,那麼整個ip的有效長度(不包含』.』)就介於4-12,這就是對於給出的字串長度不再這個範圍之內,就不用回溯了。
第二點,字串中有0的情況,比如』010010』,在回溯的時候,就可能出現』001』這樣的選擇,顯然這種情況是不正確的,不能以0開頭,除非就只有乙個0,這裡就是剪枝操作了,也就是一旦出現這樣的選擇,後面就不用再進行回溯。
第三,遞迴終止條件:形成4個整數,並且這4個整數長度加起來為原數字字串的長度。
def
restoreipaddresses
(self, s:
str)
-> list[
str]
: n =
len(s)
if n <
4or n >12:
return
res =
defbacktrace
(start, tmp, s)
:#遞迴終止條件
iflen
(tmp)==4
andlen(''
.join(tmp)
)== n:
'.'.join(tmp)
)return
for i in
range
(start, n)
:#如果加上當前選擇大於255,那麼直接從當前選擇重新開始,構造下乙個整數
ifint
(s + s[i]
)>
255:
s = s[i]
else
: s += s[i]
#處理以0開頭的情況,比較整型化前後是否相同,
#比如'001',int('001')就是1,如果不一樣
#那就是無效的了,無需進行後面的回溯過程
if s[0]
=='0'
:if s !=
str(
int(s)):
continue
#標準回溯過程
_s, s = s,
'' backtrace(i+
1, tmp, s)
tmp.pop(
) s = _s
backtrace(0,
,'')return res
整個過程除了剪枝的操作,其他的就是模板的東西,沒啥特別的,很有套路是不是。。。做選擇的過程有點像求子集,每次回溯起點從i+1開始
再來看一道題,**真的是基本一樣。。
leetcode 309 累加數
同樣要對以0開頭的情況進行剪枝,操作和上一道題完全一樣。
這道題另外需要注意的是,由前兩個數可以確定第三個數,如果當前的整個數,並不等於其前兩個數之後,那麼說明,這種組合是錯誤的,那麼後面的就沒有必要再進行回溯了,這是第二個需要剪枝的。
class
solution
:def
isadditivenumber
(self, num:
str)
->
bool
: n =
len(num)
if n <3:
return
false
res =
defbacktrace
(start, tmp, s)
:#終止條件
iflen
(tmp)
>=
3and
len(
''.join(tmp)
)== n:
tmp =
[int
(each)
for each in tmp]
for i in
range(2
,len
(tmp)):
if tmp[i-1]
+ tmp[i-2]
!= tmp[i]
:return
false
return
true
for i in
range
(start, n)
: s += num[i]
#以0開頭的情況,一樣的
if s[0]
=='0'
:if s !=
str(
int(s)):
continue
#如果當前的數不等於前兩個數之和,後面就不用再回溯,直接往後移位
iflen
(tmp)
>
2and
int(tmp[-1
])!=int
(tmp[-3
])+int
(tmp[-2
]):continue
#回溯 _s, s = s,
''if backtrace(i+
1, tmp, s)
:return
true
s = _s
tmp.pop(
)return
false
if backtrace(0,
,''):
return
true
return
false
**是不是基本一樣,如出一轍。以不變應萬變(狗頭) 復原IP位址
給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。示例 輸入 25525511135 輸出 255.255.11.135 255.255.111.35 class solution public void help string sub string cur,listres int ...
復原IP位址
問題描述 給定乙個只包含數字的字串,復原它 在中間插入點號 並返回所有可能的 ip 位址格式,輸出可能的格式的數量。有效的 ip 位址正好由四個整數 每個整數字於 0 到 255 之間 組成,整數之間用 分隔。輸入說明 輸入乙個只包含數字的字串 輸出說明 輸出乙個整數 輸入範例 2552551113...
復原IP位址
題目描述 給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。有效的 ip 位址正好由四個整數 每個整數字於 0 到 255 之間組成 整數之間用 分隔。示例 輸入 25525511135 輸出 255.255.11.135 255.255.111.35 遞迴方法 需要找出所有可能復原...