试题
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
Example:
Input: “25525511135”
Output: [“255.255.11.135”, “255.255.111.35”]
代码
DFS不难,但是边界较多
class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> out = new ArrayList<String>();
String[] temp = new String[4];
if(s == null || s.length() > 12) return out;
findAll(s, out, temp, 0, 0);
return out;
}
private void findAll(String s, List<String> out, String[] temp, int start, int num){
if(num == 4){
out.add(String.join(".", temp));
return;
}
for(int i = start + 1; i <= start + 3; i++){
// i的长度不符合要求,超过了length
if(i > s.length()) break;
// 当num=3是i必须是length
if(num == 3 && i != s.length()) continue;
String is = s.substring(start, i);
Integer ii = Integer.valueOf(is);
// 数字超过255
if(ii > 255) continue;
// 数字以0开始,但是有不等于0
if(is.startsWith("0") && ii != 0) continue;
// 数字全是0,但是长度超过1
if(is.length()>1 && ii == 0) continue;
temp[num] = is;
findAll(s, out, temp, i, num+1);
}
return;
}
}