題目:
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given “25525511135”,
return [“255.255.11.135”, “255.255.111.35”]. (Order does not matter)
題意:
給定一個字符串,代表了IP地址,現在需要返回所有的合法的IP地址。
思路:
我們知道IP地址可以用點分十進制表示,而每一個點區分開來的是八個bit的數字,八個bit的數字的範圍是[0,255],所以比如保證這四個數字每個數字都是在這個範圍內,另外需要保證的是不要出現01這種數字,0只能單獨作爲一個十進制數,或者跟在其他數後面,0不能出現在十進制數的開頭,並且這個十進制還超過一位。
以上。
代碼如下:
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> result;
vector<string> temp;
getIP(result, s, 0, 0, temp, s.length());
return result;
}
void getIP(vector<string>& result, string& s, int i, int j, vector<string>& temp, int strLen) {
if (i == strLen) {
if (j == 4) {
string st = "";
for (int k = 0; k < 3; k++) {
st += temp[k] + ".";
}
st += temp[3];
result.push_back(st);
}
return;
}
else if (j == 4)return;
for (int k = 1; k <= strLen - 3 + j - i; k++) {
if (k > 1 && s[i] == '0')break;
string sub = s.substr(i, k);
if (atoi(sub.c_str()) <= 255) {
temp.push_back(sub);
getIP(result, s, i + k, j + 1, temp, strLen);
temp.pop_back();
}
else break;
}
}
};