leetcode 93 復原ip位址
首先乙個正確有效的ip位址,由4個整數構成,介於0-255,也就是說每個整數長度介於1-3,那麼整個ip的有效長度(不包含』.』)就介於4-12,這就是對於給出的字串長度不再這個範圍之內,就不用回溯了。
第二點,字串中有0的情況,比如』010010』,在回溯的時候,就可能出現』001』這樣的選擇,顯然這種情況是不正確的,不能以0開頭,除非就只有乙個0,這裡就是剪枝操作了,也就是一旦出現這樣的選擇,後面就不用再進行回溯。
第三,遞迴終止條件:形成4個整數,並且這4個整數長度加起來為原數字字串的長度。
整個過程除了剪枝的操作,其他的就是模板的東西,沒啥特別的,很有套路是不是。。。做選擇的過程有點像求子集,每次回溯起點從i+1開始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
再來看一道題,**真的是基本一樣。。
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 遞迴方法 需要找出所有可能復原...