首先胖博主需要說明的是,ip位址字串長度小於12,每三位不得大於255.。。。
**參考
如果k = 0,則表示三個點已經加入完成,四段已經形成,若這時字串剛好為空,則將當前分好的結果儲存。若k != 0, 則對於每一段,我們分別用一位,兩位,三位來嘗試,分別判斷其合不合法,如果合法,則呼叫遞迴繼續分剩下的字串,最終和求出所有合法組合。
bool isvalid(string s)
void restore(string&s,int k,string out,vector&res)
} else
} }}
vectorrestoreipaddresses(string s)
restore(s,4,"",res);
return res;
}
或者再簡化一點
省掉isvalid函式,直接在呼叫遞迴之前用if語句來濾掉不符合題意的情況,這裡面用了k != std::to_string(val).size(),其實並不難理解,比如當k=3時,說明應該是個三位數,但如果字元是"010",那麼轉為整型val=10,再轉回字串就是"10",此時的長度和k值不同了,這樣就可以找出不合要求的情況了。
class solution
void helper(string s, int n, string out, vector& res) else }}
};
leetcode 復原IP位址
給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。由於ip每個段在 0,255 之間,暴力迴圈設定點的位置最大次數3 3 3 27所以就暴力解決了。param s return public list restorei...
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,...