面试笔试题:给你一个数组,再给你一个整数(目标数),找出数组中和为目标数的所有组合。其中,数组中的数可以重复用,结果组合不能重复。
Java版-核心代码模式
import java.util.*;
public class Test {
public ArrayList<ArrayList<Integer>> combinationSum (int[] candidates, int target) {
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
int k = candidates.length;
if(k==0){
return res;
}
for(int i = 0;i<k;i++){
ArrayList<Integer> temp = new ArrayList<>();
temp.add(candidates[i]);
dd(candidates,target-candidates[i],k,temp);
if(temp.size()!=0){
if(temp.size()==1&&temp.get(0)==target){
res.add(temp);
}
if(temp.size()!=1)res.add(temp);
}
}
return res;
}
public boolean dd(int[] nums,int tar,int k,ArrayList<Integer> temp){
if(tar==0)return true;
if(tar<0)return false;
for(int i = 0;i<k;i++){
if(dd(nums,tar-nums[i],k,temp)){
temp.add(nums[i]);
return true;
}
}
return false;
}
}
|