Leetcode, RestoreIpAddress
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void dfs(string s, size_t start, size_t step, string ip, vector<string> &res)
{
if ( start == s.size() && step == 4 )
{
//去掉最后'.'
ip.resize(ip.size() - 1);
res.push_back(ip);
return;
}
//step = 3 s.size() - start > 3
//step = 2 s.size() - start > 6
if (s.size() - start > (4 - step) * 3)
return;
//step = 3 s.size() - start < 1
//step = 2 s.size() - start < 2
if (s.size() - start < 4 - step)
return;
int num = 0;
for ( int i = start; i < start + 3; ++i )
{
num = num * 10 + (s[i] - '0');
if (num <= 255)
{
ip += s[i];
dfs(s, i + 1, step + 1, ip + '.', res);
}
//不允许前缀0, 但允许单个0
if (num == 0) break;
}
}
//时间复杂度O(n^4),空间复杂度O(n)
vector<string> solution(string s)
{
vector<string> res;
string ip;
dfs(s, 0, 0, ip, res);
return res;
}
int main()
{
auto res = solution("25525511135");
#if 0
{
"255.255.11.135"
"255.255.111.35"
}
#endif // 0
return 0;
}