题目链接: https://leetcode.com/problems/restore-ip-addresses/
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)
思路: DFS+backtracking, ip地址可分为四部分, 每一部分可取1,2,3字符, 所以只要设置好取长度为1,2,3时的条件, 和终止条件即可.
即:
1. 首位字符为0, 则只能取一位
2. 首位不为零, 长度>=2, 可以取2位
3. 首位不为0, 长度>=3, 并且取三位得到的整数<256, 则可取三位
代码如下:
class Solution {
public:
void DFS(string s, string str, int k)
{
if(s.size()==0 && k==4) return ans.push_back(str.substr(0, str.size()-1));
if(s.size()==0 || k== 4) return;
for(int i = 1; i <= min(3, (int)s.size()); i++)
{
int val = stoi(s.substr(0,i));
if(val >=0 && val <= 255)
DFS(s.substr(i), str+s.substr(0,i)+".", k+1);
if(s[0] == '0') break;
}
}
vector<string> restoreIpAddresses(string s) {
if(s.size()==0) return {};
DFS(s, "", 0);
return ans;
}
private:
vector<string> ans;
};