试题
数字だけを含む文字列を考えると、すべての可能な有効なIPアドレスの組み合わせを返すことによって、それを復元します。
例:
入力:「25525511135」
出力:[「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;
}
}