題目描述
給定一個只包含數字的字符串,復原它並返回所有可能的 IP 地址格式。
示例:
輸入: "25525511135"
輸出: ["255.255.11.135", "255.255.111.35"]
解題思路
遞歸地搜索地址段,對於每個地址首先判斷其是否為'0',若為0則其必須作為一個單獨的地址段,接下來只能判斷其下一個地址段;若不為0,則依次取1-3位數字組成的數作為地址段,注意在取3位的時候要保證其小於256,否則停止加入地址。最后在地址段總數為4且已遍歷到字符串末尾時,將其加入到結果集合中。
代碼
1 class Solution { 2 public: 3 vector<string> restoreIpAddresses(string s) { 4 vector<string> res; 5 findIp(s, 0, 0, "", res); 6 return res; 7 } 8 void findIp(string s, int idx, int part, string temp, vector<string> &res){ 9 if(part == 4 && idx == s.length()) 10 res.push_back(temp.substr(0, temp.length() - 1)); 11 else if(part < 4){ 12 if(s[idx] == '0'){ 13 findIp(s, idx + 1, part + 1, temp + "0.", res); 14 return; 15 } 16 for(int i = 1; i < 4; i++){ 17 if(idx + i - 1 == s.length()) return; 18 int address = stoi(s.substr(idx, i)); 19 if(address < 256) 20 findIp(s, idx + i, part + 1, temp + to_string(address) + ".", res); 21 } 22 } 23 } 24 };