[Lintcode] #153 数字组合 II

编程入门 行业动态 更新时间:2024-10-10 08:23:49

[Lintcode] #153 数字<a href=https://www.elefans.com/category/jswz/34/1769978.html style=组合 II"/>

[Lintcode] #153 数字组合 II

给出一组候选数字(C)和目标数字(T),找出C中所有的组合,使组合中数字的和为T。C中每个数字在每个组合中只能使用一次。

 注意事项
  • 所有的数字(包括目标数字)均为正整数。
  • 元素组合(a1, a2, … , ak)必须是非降序(ie, a1 ≤ a2 ≤ … ≤ ak)。
  • 解集不能包含重复的组合。 
您在真实的面试中是否遇到过这个题?  Yes 样例

给出一个例子,候选数字集合为[10,1,6,7,2,1,5] 和目标数字 8  ,

解集为:[[1,7],[1,2,5],[2,6],[1,1,6]]

public class Solution {/** @param num: Given the candidate numbers* @param target: Given the target number* @return: All the combinations that sum to target*/public List<List<Integer>> combinationSum2(int[] num, int target) {// write your code hereArrays.sort(num);List<List<Integer>> data = new ArrayList<>();helper(data, new ArrayList<>(), num, 0, 0, target);return data;}public void helper(List<List<Integer>> data, List<Integer> cur, int[] num, int depth, int sum, int target) {if (sum == target) {data.add(new ArrayList<>(cur));return;} else if (sum > target) {return;}for (int i = depth; i < num.length; ++i) {if (i > depth && num[i] == num[i - 1])continue;cur.add(num[i]);helper(data, cur, num, i + 1, sum + num[i], target);cur.remove(cur.size() - 1);}}
}


更多推荐

[Lintcode] #153 数字组合 II

本文发布于:2024-02-07 10:21:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1756616.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:组合   数字   Lintcode   II

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!