ti题目链接:
题目链接:https://leetcode.com/problems/combination-sum/
用给定数组中的数组成target,每个数可以用无限次
dfs,每一层遍历该层的数字最多能使用的次数(可以使用0次,也就是不选这个数)。这样可以保证不会重复,而且每个数字都能用到。
class Solution {
List<List<Integer>> ans = new ArrayList<>();
int []nums = new int [30];
int n;
public List<List<Integer>> combinationSum(int[] candidates, int target) {
n = candidates.length;
nums = candidates;
int []cnt = new int [30];
dfs(0,cnt,0,target);
return ans;
}
public void dfs(int ind,int[] cnt,int sum,int target){
if(sum == target){
ArrayList<Integer> tem = new ArrayList<Integer>();
for(int i=0;i<n;i++)
for(int j = 0;j<cnt[i];j++)
tem.add(nums[i]);
ans.add(tem);
return;
}
if(ind>=n)
return;
for(int j=0;sum + j*nums[ind]<=target;j++){
cnt[ind]=j;
dfs(ind+1,cnt,sum + j*nums[ind],target);
cnt[ind]=0;
}
}
}