DFS + 回溯(Backtracking)
public class Solution
{
public IList<string> RestoreIpAddresses(string s)
{
IList<string> addresses = new List<string>();
StringBuilder tempAddress = new StringBuilder();
deRestore(0, tempAddress, addresses, s);
return addresses;
}
private void deRestore(int k, StringBuilder tempAddress, IList<string> address, string s)
{
if (k == 4 || s.Length == 0)
{
if (k == 4 && s.Length == 0)
{
address.Add(tempAddress.ToString());
}
return;
}
for (int i = 0; i < s.Length && i <= 2; i++)
{
if (i != 0 && s[0] == '0')
{
break;
}
string part = s.Substring(0, i + 1);
if (int.Parse(part) <= 255)
{
if (tempAddress.Length != 0)
{
part = "." + part;
}
tempAddress.Append(part);
deRestore(k + 1, tempAddress, address, s.Substring(i + 1));
tempAddress.Remove(tempAddress.Length - part.Length, part.Length);
}
}
}
}
仅供参考