List<String> dp = new ArrayList<>();
List<String> path = new ArrayList<>();
public void dfs(String s, int index) {
if(index>=s.length()) {
//必须是四位整数
if(path.size()==4) {
dp.add(String.join(".", new ArrayList<>(path)));
}
return ;
}
for(int i=index;i<s.length();i++) {
if(isIp(s.substring(index,i+1))) {
path.add(s.substring(index,i+1));
dfs(s,i+1);
path.remove(path.size()-1);
}else
break;
}
}
public boolean isIp(String s) {
//前导0情况
if(s.charAt(0)=='0'&&s.length()>1)return false;
if(s.length()>3)return false;
//判断IP合法性
int key = Integer.valueOf(s);
if(key<0||key>255)return false;
return true;
}
public List<String> restoreIpAddresses(String s) {
if(s.length()<4)return dp;
dfs(s,0);
return dp;
}
leetcode78.子集
List<List<Integer>> dp = new ArrayList<>();
List<Integer> path = new ArrayList<>();
public void dfs(int[]nums,int index) {
if(path.size()>0) {
dp.add(new ArrayList<>(path));
}
for(int i=index;i<nums.length;i++) {
path.add(nums[i]);
dfs(nums,i+1);
path.remove(path.size()-1);
}
}
public List<List<Integer>> subsets(int[] nums) {
if(nums.length==0) return dp;
dp.add(new ArrayList<>(path));
dfs(nums,0);
return dp;
}
leetcode90.子集II
List<List<Integer>> dp = new ArrayList<>();
List<Integer> path = new ArrayList<>();
public void dfs(int[]nums,int index) {
if(path.size()>0) {
dp.add(new ArrayList<>(path));
}
for(int i=index;i<nums.length;i++) {
if(i > index && nums[i]==nums[i-1]) {
continue;
}
path.add(nums[i]);
dfs(nums,i+1);
path.remove(path.size()-1);
}
}
public List<List<Integer>> subsetsWithDup(int[] nums) {
if(nums.length==0) return dp;
dp.add(new ArrayList<>(path));
Arrays.sort(nums);
dfs(nums,0);
return dp;
}