(LeetCode39)Combination Sum

来源:互联网 发布:提升心理承受能力知乎 编辑:程序博客网 时间:2024/05/19 00:12

在做LeetCode39题的时候,作为算法小白没有啥思路,看课后讨论又有点看不懂,最后在CSDN看到一篇关于这道题的详解,看完之后发现博主贴的代码有各种语言版本,但每个版本没有详细分析,于是我想针对java版本做一个代码注释补充,希望和我一样的小白能够清晰的理解这道题,也有助于我以后复习。下面是博主的代码。

  1. public List<List<Integer>> combinationSum(int[] candidates, int target) {  
  2.     List<List<Integer>> res = new ArrayList<>();  
  3.     List<Integer> temp = new ArrayList<>();  
  4.     Arrays.sort(candidates);  
  5.     findSum(candidates, target, 0,0,temp, res);     
  6.     return res;  
  7. }  
  8. public void findSum(int[] candidates, int target, int sum, int level,List<Integer> temp, List<List<Integer>> res){  
  9.     if(sum == target) {  
  10.         res.add(new ArrayList<>(temp));  
  11.         return;  
  12.     } else if(sum > target) {  
  13.         return;  
  14.     } else {  
  15.         for(int i=level;i<candidates.length;i++) {  
  16.             temp.add(candidates[i]);  
  17.             findSum(candidates, target, sum+candidates[i], i, temp, res);  
  18.             temp.remove(temp.size()-1);  
  19.         }  
  20.     }  
  21. }  
可以看到,博主的方法是一个分治法求解,将大问题化解为了小问题的求解,即三种情况。1.如果找到一种情况,那就add进res并返回2.如果相加数大于目标,则返回3.如果sum小于目标,则继续递归循环。

第一第二种情况很容易理解,我想分析一下第三种情况,首先findsum函数中博主用了一个level参数,一开始我不明白什么意思,后来发现是为了配合for循环能够加相同的数,就比如题目要求得到7,我们可以2+2+3,加了两个2,如果没有level就不能加相同的数了。

我最后举一个题目例子吧。首先

1.0加了一个2,sum就为2,进入递归 

 2.sum变为4,继续递归

3.sum变为6,继续递归

4.sum变成8>7,return,sum变为6

5.进入for循环sum此时等于2+2+2+3=9>7,return,sum还是为6

6.继续for循环sum等于2+2+2+6>7

7.sum等于2+2+2+7>7

8.返回上一级递归,sum变为2+2,并继续for循环

9.sum变为2+2+3==7,放入res

10.sum变为2+2+6>7

以此类推。

第一次发博,有些地方可能讲的不是很清楚或者讲错了,希望大家指正。一起加油!

原博地址:http://blog.csdn.net/sbitswc/article/details/31659809###;

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 云南诚信腾赛鸽中心 云南腾云信息产业有限公司 云南腾云国际旅行社 云南仁腾文化 云南绿茶 云南普洱茶功效与作用 云南布朗山普洱茶 云南普洱茶批发市场 云南普洱茶网 云南普洱熟茶 云南勐海普洱茶 云南普洱茶批发网 云南普洱茶小青柑 云南有什么茶 云南的茶 云南老树茶 云南滇茶 云南古树茶价格表 云南特色茶 云南易武古树茶 云南什么茶 云南石头茶 云南普洱生态茶 云南茶烟 云南普洱散茶价格 云南野生茶 云南糯米茶 云南大叶种茶 云南坨茶 云南七子饼茶7262价格 云南野生古树茶 云南紫娟茶 云南茶膏 云南著名茶 云南勐海古树茶 云南七子饼茶功效 云南买茶 云南茶王 云南有什么茶出名 云南老茶 散茶