复原IP地址
List<String> res=new ArrayList<>();
public List<String> restoreIpAddresses(String s) {
StringBuilder sb=new StringBuilder (s);
backTrack(sb,0,0);
return res;
}
public void backTrack(StringBuilder sb, int index,int dotCnt){
if(dotCnt==3){
if(isValid(sb,index,sb.length()-1)){
res.add(sb.toString());
}
return;
}
for(int i=index;i<sb.length();i++){
if(isValid(sb,index,i)){
sb.insert(i+1,".");
backTrack(sb,i+2,dotCnt+1);
sb.deleteCharAt(i+1);
}else{
break;
}
}
}
public boolean isValid(StringBuilder sb,int start,int end){
if(start>end)return false;
if(sb.charAt(start)=='0'&&start!=end)return false;
int sum=0;
for(int i=start;i<=end;i++){
int k=sb.charAt(i)-'0';
sum=sum*10+k;
if(sum>255)return false;
}
return true;
}
子集
List<List<Integer>> res= new ArrayList<List<Integer>>();
LinkedList<Integer> path=new LinkedList<Integer>();
public List<List<Integer>> subsets(int[] nums) {
findsubset(nums,0);
return res;
}
public void findsubset(int[] nums,int index){
res.add(new ArrayList<>(path));
for(int i=index;i<nums.length;i++){
path.add(nums[i]);
findsubset(nums,i+1);
path.removeLast();
}
}
子集II
List<List<Integer>> res=new ArrayList<List<Integer>>();
LinkedList<Integer> path=new LinkedList<Integer>();
public List<List<Integer>> subsetsWithDup(int[] nums) {
Arrays.sort(nums);
backTrack(nums,0);
return res;
}
public void backTrack(int[] nums,int index){
res.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]);
backTrack(nums,i+1);
path.removeLast();
}
}