题意:给定一串数字,返回这串数字能够组成的所有合法ip。
思路:对ip的每一段进行isValid判断,再对每一段的ip,若满足长度为3且通过isValid判断,则返回;否则,对每一段的ip,若当前分割满足isValid,则递归调用dfs,进行下一轮的调用。
代码:
package com.RestoreIpAddresses;
import java.util.ArrayList;
public class RestoreIpAddresses {
public boolean isValid(String string ) {
if(string.charAt(0)=='0')
return string.equals('0');
int num = Integer.parseInt(string);
if(num > 0 && num <= 255) return true;
else return false;
}
public void dfs(String s , int start , String item , ArrayList<String>res) {
if(start == 3 && isValid(s)){
res.add(item+s);
return;
}
for (int i = 0; i< 3 && i < s.length()-1; i++) {
String substr = s.substring(0, i+1);
if(isValid(substr)){
dfs(s.substring(i+1, s.length()), start+1, item+substr+".", res);
}
}
}
public ArrayList<String> restoreIpAddresses(String s) {
ArrayList<String> res = new ArrayList<>();
String item = new String();
if(s.length() < 4|| s.length() > 12){
return res;
}
dfs(s, 0, item, res);
return res;
}
public static void main(String[] args) {
String string = "25525511135";
RestoreIpAddresses ria = new RestoreIpAddresses();
ArrayList<String>res = new ArrayList<>();
res = ria.restoreIpAddresses(string);
System.out.println(res);
}
}