Leetcode No.93
阿新 • • 發佈:2019-05-08
== 求解 str leet true class span 函數 style
給定一個只包含數字的字符串,復原它並返回所有可能的 IP 地址格式。
示例:
輸入: "25525511135"
輸出: ["255.255.11.135", "255.255.111.35"]
解答:遇到這種問題第一想到的就是用遞歸函數來求解。在這道題實際上也是可以這樣處理的。
遞歸函數邏輯如下:
【1】如果已經取到了四個字符且字符串已經被取完,那麽所取字符串符合要求,保存(為了加快速度,這裏采用 s.size()>(4-n)*3 一個判斷條件);
【2】依次提取字符串的前一個、前二個、前三個字符串,並轉化成十進制數字,判斷是否符合要求(如果所取字符數大於1那麽首字符不能為 ’0‘ );是則進行遞歸處理();
void restoreIpAddressesHelper(string s,vector<string>&res,string out,int n) { if(n==4 || s.size()>(4-n)*3) { if(s.empty()) res.push_back(out); return; } string num; for(int i=1;i<4;i++) { num = s.substr(0,i); if(atoi(num.c_str())<256 && (i>1?num[0]!=‘0‘:true) && (int)s.size()>=i) restoreIpAddressesHelper(s.substr(i),res, out+(n==0?"":".")+num,n+1); } } //93 vector<string> restoreIpAddresses(string s) { vector<string> res; if(s.size()>12 || s.size()<4) return res; string temp; restoreIpAddressesHelper(s,res,"",0); return res; }//93
Leetcode No.93