LeetCode 力扣 93 復原IP位址

2021-10-03 19:18:30 字數 1855 閱讀 5718

給乙個字串,輸出所有的可能的 ip 位址,注意一下,01.1.001.1 類似這種 0 開頭的是非法字串。

很類似於剛做過的 91 題,對字串進行劃分。這個其實也是劃分,劃分的次數已經確定了,那就是分為 4 部分。那麼就直接用回溯的思想,第一部分可能是 1 位數,然後進入遞迴。第一部分可能是 2 位數,然後進入遞迴。第一部分可能是 3 位數,然後進入遞迴。很好理解,直接看**理解吧。

public list

restoreipaddresses

(string s)

/*** @param: start 字串開始部分

* @param: temp 已經劃分的部分

* @param: ans 儲存所有的解

* @param: count 當前已經加入了幾部分

*/private

void

getans

(string s,

int start, stringbuilder temp, list

ans,

int count)

//當前剛好到達了末尾

if(start == s.

length()

)return;}

//當前超過末位,或者已經到達了 4 部分結束掉

if(start > s.

length()

|| count ==4)

//儲存的當前的解

stringbuilder before =

newstringbuilder

(temp)

;//加入 1 位數

temp.

(s.charat

(start)+""

+'.');

getans

(s, start +

1, temp, ans, count +1)

;//如果開頭是 0,直接結束

if(s.

charat

(start)

=='0'

)return

;//加入 2 位數

if(start +

1< s.

length()

)//加入 3 位數

if(start +

2< s.

length())}}

參考這裡,相當暴力直接。因為我們知道了,需要劃分為 4 部分,所以我們直接用利用三個指標將字串強行分為四部分,遍歷所有的劃分,然後選取合法的解。

public list

restoreipaddresses

(string s)}}

}return res;

}public

boolean

isvalid

(string s)

時間複雜度:如果不考慮我們呼叫的內部函式,integer.parseint,s.substring,那麼就是 o(1)。因為每一層迴圈最多遍歷 4 次。考慮的話每次呼叫的時間複雜度是 o(n),常數次呼叫,所以是 o(n)。

空間複雜度:o(1)。

更多詳細通俗題解詳見 leetcode.wang 。

力扣第93題 復原IP位址

給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。有效的 ip 位址正好由四個整數 每個整數字於 0 到 255 之間組成 整數之間用 分隔。當字串長度小於4或者大於12時,返回 示例1 輸入 25525511135 輸出 255.255.11.135 255.255.111.35 ...

力扣刷題筆記 93 復原IP位址 C

今日簽到題,題目如下 給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。有效的 ip 位址正好由四個整數 每個整數字於 0 到 255 之間組成 整數之間用 分隔。示例 輸入 25525511135 輸出 255.255.11.135 255.255.111.35 想了許久,想不到什...

力扣 復原IP位址

給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。示例 輸入 25525511135 輸出 255.255.11.135 255.255.111.35 const seg count 4 var ans string segments int func restoreipaddres...