class Solution {
private List<List<Integer>> res = new ArrayList<>();
private int count = 0;
public int combinationSum4(int[] nums, int target) {
Arrays.sort(nums);
int[] visited = new int[target + 1];
Arrays.fill(visited, -1);
return dfs2(nums, target, visited);
}
/**
* 普通回溯会超时
*/
public void dfs(int[] nums, int target, List<Integer> sublist){
if(target == 0){
res.add(new ArrayList<>(sublist));
count++;
return;
}
for(int i = 0; i < nums.length; i++){
if(nums[i] <= target){
sublist.add(nums[i]);
dfs(nums, target - nums[i], sublist);
sublist.remove(sublist.size() - 1);
}
}
}
/*
* 记忆化搜索
*/
public int dfs2(int[] nums, int target, int[] visited){
if(visited[target] != -1){
return visited[target];
}
if(target == 0){
return 1;
}
visited[target] = 0;
for(int i = 0; i < nums.length; i++){
if(nums[i] > target)
break;
visited[target] += dfs2(nums, target - nums[i], visited);
}
return visited[target];
}
}
LeetCode377. 组合总和IV
最新推荐文章于 2024-04-07 10:52:07 发布