// 题目:给一个没有重复元素的数组和一个target,输出所有和为target的元素组合,可以重复
// 解法:使用递归,当等于target时就将元素的组合存到List<List<Integer>> result中
public class Main {
public static void main(String[] args){
List<List<Integer>> result = findNum(new int[]{1,3,5,6},8);
System.out.println("complete!");
}
public static List<List<Integer>> findNum(int[] input, int target){
List<List<Integer>> result = new ArrayList<List<Integer>>();
List<Integer> temp = new ArrayList<Integer>();
findNumHelper(input,0,temp,result,target);
return result;
}
public static void findNumHelper(int[] input, int pos, List<Integer> temp, List<List<Integer>> result, int target){
for(int i = pos;i<input.length;i++){ //设定pos的意义在于下一个数字从当前数字及之后开始查找,这样可以避免重复结果的出现
if(target == input[i]){ //如[1,1,3],[1,3,1],因为找了3之后,就不会找3前面的数字了
temp.add(input[i]);
result.add(new ArrayList<Integer>(temp));
temp.remove(temp.size()-1);
return;
}else if(target>input[i]){
temp.add(input[i]);
findNumHelper(input,i,temp,result,target-input[i]);
temp.remove(temp.size()-1);
}else{
return;
}
}
}
}
寻找数组中和为指定数字的子数组,可以重复,Leetcode 39
最新推荐文章于 2021-12-23 19:29:46 发布