题目描述:
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 地址有哪些,单个位置可以有一位,两位,三位
- 单个位置上的字符串所代表的数值不得大于 255,其中以 0 开头的,比如 01,001 都是不合法的字符串
- 若拆分的字符串是合法的字符串,那么一定是分成了四段,加入了三个点
代码如下:
public ArrayList<String> restoreIpAddresses(String s) {
ArrayList<String> res = new ArrayList<String>();
helper(s,0,"", res);
return res;
}
// 用来表示递归的函数,其中 n 表示已经分了几段了
public void helper(String s, int n, String out, ArrayList<String> res){
if(n == 4){
if(s.isEmpty())
res.add(out);
return;
}
// k 表示当前需要截取的字符串的长度
for(int k = 1; k < 4; k++){
if(s.length() < k) break;
int value = Integer.valueOf(s.substring(0,k));
// 判断当前截取的字符串是否合法
if(value > 255 || k != String.valueOf(value).length()) continue;
helper(s.substring(k,s.length()), n + 1, out + s.substring(0,k) + (n == 3 ? "" : "."),res);
}
}