第28天
切割的思路还是不太对
class Solution {
List<String> res;
public List<String> restoreIpAddresses(String s) {
res = new ArrayList<>();
List<String> arr = new ArrayList<>();
// if(isEffective("012")){
// System.out.println("=====");
// }
dfs(s,0,arr);
return res;
}
public boolean isEffective(String s){
char[] chars = s.toCharArray();
if(chars.length > 1 && chars[0]== '0'){
return false;
}
if(chars.length > 3 || chars.length < 1){
return false;
}
int a = Integer.valueOf(s);
System.out.println(a);
if( 0 <= a && a <= 255){
return true;
}
return false;
}
public void dfs(String s,int startIndex,List<String> arr){
if(startIndex >= s.length() && arr.size() == 4 ){
StringBuffer buffer = new StringBuffer();
for(int i = 0; i < arr.size() -1; i++){
buffer.append(arr.get(i)).append(".");
}
buffer.append(arr.get(arr.size()-1));
// System.out.println(buffer.toString());
res.add(buffer.toString());
arr = new ArrayList<>();
// for(int i = 0; i < arr.size() -1; i++){
// buffer.append(arr.get(i)).append(".");
// }
return;
}
for(int i = startIndex;i < s.length();i ++){
String subStr = s.substring(startIndex,i + 1);
if(isEffective(subStr)){
// buffer.append(subStr).append(".");
arr.add(subStr);
dfs(s,i + 1,arr);
arr.remove(arr.size() -1);
}
}
}
}
class Solution {
List<List<Integer>> res;
public List<List<Integer>> subsetsWithDup(int[] nums) {
res = new ArrayList<>();
List<Integer> arr = new ArrayList<>();
dfs(nums,0,arr);
return res;
}
public void dfs(int[] nums,int startIndex,List<Integer> arr){
res.add(new ArrayList<>(arr));
if(startIndex == nums.length){
return;
}
for(int i = startIndex;i < nums.length;i++){
if(i > startIndex && nums[i] == nums[i - 1]){
continue;
}
arr.add(nums[i]);
dfs(nums,i + 1,arr);
arr.remove(arr.size() - 1);
}
}
}