給乙個字串,輸出所有的可能的 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...