題目鏈接:click~
/*題意:給出一串只含數字的字符串,返回所有合法的IP*/
/**
*思路: 對字符串進行分段處理,每段組成的數不能超過255,。將IP地址分爲4段
* 每段有三種情況:
* 1)只取一個數字
* 2)取兩個數字,第一個數不爲0
* 3)取三個數字,第一個數字不爲0,且三個數字組成的數小於256
*/
class Solution {
public:
//part表示第幾段IP
void restoreIpAddresses(string &s, int start, int part, string ip, vector<string> &res) {
int len = s.size();
//剩下的數字過多
if(len - start > (4-part)*3) return;
//剩下的數字過少
if(len - start < (4-part)) return;
if(start == len && part == 4) {
//將ip中最後一個'.'去掉
res.push_back(ip.substr(0, ip.size()-1));
return;
}
int num = 0;
for(int i = start; i < min(start+3, len); i ++) {
//三種情況
num = num*10 + s[i] - '0';
if(num <= 255) {
ip += s[i];
restoreIpAddresses(s, i+1, part+1, ip+'.', res);
}
//如果第一個是0的話, 只考慮0的情況,不需要考慮0組成的地址
if(num == 0) break;
}
}
vector<string> restoreIpAddresses(string s) {
vector<string> res;
string ip;
restoreIpAddresses(s, 0, 0, ip, res);
return res;
}
};