leetcode 93 復原IP位址

2021-10-07 17:52:01 字數 1418 閱讀 5411

93. 復原ip位址

給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。

有效的 ip 位址正好由四個整數(每個整數字於 0 到 255 之間組成),整數之間用 『.』 分隔。

示例:輸入: 「25525511135」

輸出: [「255.255.11.135」, 「255.255.111.35」]

還是屬於回溯列舉的範疇,每次加入的資料長度有1,2,3,共三種選擇,所以下面的for 迴圈內是(0,4).

意思就是每次都可以選擇加入資料長度為1,2,3的資料,每個都組合都需要遍歷一次,但是彈出的條件就是當count計數器大小為4的時候,也就是加入4次過後,需要做一次判斷是否符合輸出,相當於這裡做了一次剪枝限制。

from typing import list

class

solution

:def

restoreipaddresses

(self, s:

str)

-> list[

str]

: out =

length =

len(s)

if length <

4or length >12:

return out

defbacktarck

(count, ip_address,res)

:if count ==4:

#有四個段之後可以進行判斷

iflen

(res)==0

::-1

])count =

0return

#在判斷資料是否合格的時候,注意 0可以加入,但是 0xx不能加入,將要加入的長度不能大於剩餘長度

for right in

range(1

,4):

#m每次回溯的時候,下一段的長度1,2,3

if right <=

len(res)

andint

(res[

:right]

)<=

255and

(len

(res[

:right])==

1or res[0]

!='0'):

backtarck(count+

1,ip_address+res[

:right]

+'.'

,res[right:])

backtarck(0,

"",s)

return out

if __name__ ==

"__main__"

: s = solution(

)print

(s.restoreipaddresses(

"0100"

))

LeetCode93 復原IP位址

首先需要知道ip位址的特性,總共有四段,每段的取值都在 0,255 之間,四段之間用3個 隔開。目標就是如何放置這3個分隔符,使得ip位址是合法的,然後把合法的ip位址記錄下來。方法一 暴力解法。四段的長度都有取1 3的可能性,遍歷所有的情況,記錄合法ip位址。當然類似000,001,00,010這...

leetcode 93 復原IP位址

先判斷字串字串長度是否處於 4,12 然後判斷字串將字串分成從ip位址的第一位進行選擇 ip位址每一位最大為255 最小為0 ip位址的每一位所包含的字串中的位數分別是1 2 3 位 ip位是三位時,要判斷是否大於255 void restore std vector a,std string s,...

LeetCode 93 復原IP位址

給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。示例 輸入 25525511135 輸出 255.255.11.135 255.255.111.35 只用確認三個點的位置就可以了,所以用三個迴圈來確定點的位置,如果太大了直接continue,如果乙個長度不是1的部分頭部是0,也co...