classSolution{publicList<String> result =newArrayList<>();publicbooleanisVaild(String str){if(str.length()>3|| str.isEmpty())returnfalse;if(str.charAt(0)=='0'&& str.length()>1)returnfalse;int sum =0;for(int i =0; i < str.length(); i++){
sum *=10;int num = str.charAt(i)-'0';
sum += num;}if(sum >255)returnfalse;returntrue;}publicvoidbackTracking(String s,int startId,int pointNum){if(pointNum ==3){String str = s.substring(startId, s.length());if(isVaild(str)){
result.add(s);}else{return;}}for(int i = startId; i < s.length(); i++){String temp = s.substring(startId, i +1);if(isVaild(temp)){
s = s.substring(0, i +1)+"."+ s.substring(i +1);
pointNum++;backTracking(s, i +2, pointNum);
s = s.substring(0, i +1)+ s.substring(i +2);
pointNum--;}else{break;}}}publicList<String>restoreIpAddresses(String s){if(s.length()<4|| s.length()>12){return result;}backTracking(s,0,0);return result;}}
力扣 78.子集
classSolution{publicList<List<Integer>> result =newLinkedList<>();publicList<Integer> path =newArrayList<>();publicvoidbackTracking(int[] nums,int startId){
result.add(newArrayList<>(path));for(int i = startId; i < nums.length; i++){
path.add(nums[i]);backTracking(nums, i +1);
path.removeLast();}}publicList<List<Integer>>subsets(int[] nums){backTracking(nums,0);return result;}}
力扣 90.子集II
classSolution{publicList<List<Integer>> result =newLinkedList<>();publicList<Integer> path =newArrayList<>();publicvoidbackTracking(int[] nums,int startId){
result.add(newArrayList<>(path));for(int i = startId; i < nums.length; i++){// 排除当前层中重复元素, 当前层从startId开始if(i > startId && nums[i]== nums[i -1]){continue;}
path.add(nums[i]);// 同一层中的节点下一层开始的位置为i + 1而不是startId + 1backTracking(nums, i +1);
path.removeLast();}}publicList<List<Integer>>subsetsWithDup(int[] nums){if(nums ==null|| nums.length ==0)return result;Arrays.sort(nums);backTracking(nums,0);return result;}}