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)
public class Solution {
static char[] str;
static ArrayList<String> ans = new ArrayList<String>();
public ArrayList<String> restoreIpAddresses(String s) {
ArrayList<Integer> stack = new ArrayList<Integer>();
ans.clear();
str = s.toCharArray();
dfs(stack, 0, 0);
return ans;
}
static void dfs(ArrayList<Integer> stack, int dept, int pos) {
if (dept == 4 && pos == str.length) {
ans.add(getIP(stack));
} else if (dept < 4 && pos < str.length) {
for (int i = pos; i < str.length; ++i) {
if(str[pos] == '0' && pos != i)
return;
int temp = getNum(pos, i + 1);
if (temp <= 255) {
stack.add(temp);
dfs(stack, dept + 1, i + 1);
stack.remove(dept);
} else {
break;
}
}
}
}
static int getNum(int start, int end) {
int num = 0;
for (int i = start; i < end; ++i) {
num *= 10;
num += str[i] - '0';
}
return num;
}
static String getIP(ArrayList<Integer> stk) {
String s = "";
s += stk.get(0);
for (int i = 1; i < stk.size(); ++i) {
s += ".";
s += stk.get(i);
}
return s;
}
}