leetcode39. 组合总和

举报
兔老大 发表于 2021/04/24 01:57:14 2021/04/24
【摘要】 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。 解集不能包含重...

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

说明:

所有数字(包括 target)都是正整数。
解集不能包含重复的组合。 
示例 1:

输入: candidates = [2,3,6,7], target = 7,
所求解集为:
[
  [7],
  [2,2,3]
]
示例 2:

输入: candidates = [2,3,5], target = 8,
所求解集为:
[
  [2,2,2,2],
  [2,3,3],
  [3,5]
]

思路:搜索回溯,代码就像说话一样一看就懂。


  
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.Stack;
  5. public class Solution {
  6. private List<List<Integer>> res = new ArrayList<>();
  7. private int[] candidates;
  8. private int len;
  9. private void findCombinationSum(int residue, int start, Stack<Integer> pre) {
  10. if (residue < 0) {
  11. return;
  12. }
  13. if (residue == 0) {
  14. res.add(new ArrayList<>(pre));
  15. return;
  16. }
  17. for (int i = start; i < len; i++) {
  18. pre.add(candidates[i]);
  19. findCombinationSum(residue - candidates[i], i, pre);
  20. pre.pop();
  21. }
  22. }
  23. public List<List<Integer>> combinationSum(int[] candidates, int target) {
  24. int len = candidates.length;
  25. if (len == 0) {
  26. return res;
  27. }
  28. this.len = len;
  29. this.candidates = candidates;
  30. findCombinationSum(target, 0, new Stack<>());
  31. return res;
  32. }
  33. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/104037258

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。