zoukankan      html  css  js  c++  java
  • 40. Combination Sum II

    题目:

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

    Each number in C may only be used once in the combination.

    Note:

    • All numbers (including target) will be positive integers.
    • Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
    • The solution set must not contain duplicate combinations.

    For example, given candidate set 10,1,2,7,6,1,5 and target 8
    A solution set is: 
    [1, 7] 
    [1, 2, 5] 
    [2, 6] 
    [1, 1, 6] 

    链接: http://leetcode.com/problems/combination-sum-ii/

    4/14/2017

    18ms, 92%

    出现的问题

    1. 第6行排序不要遗忘

    2. 第17行最开始的判断为什么是i > pos?我直接想想不出来,但是可以尝试着解释[1,1,2,5,6,7,10]中[1,1,6]和[1,7]第一组为什么可以有2个1?因为这两个1不是在同一层加进去的,所以可以视为不同的元素,而[1,7]不能重复是因为当时2个1是在同一层,pos值是一样的。

    3. 时间复杂度

     1 public class Solution {
     2     public List<List<Integer>> combinationSum2(int[] candidates, int target) {
     3         List<List<Integer>> ret = new ArrayList<>();
     4         if (candidates.length == 0) return ret;
     5         List<Integer> temp = new ArrayList<Integer>();
     6         Arrays.sort(candidates);
     7         enumerate(candidates, target, ret, temp, 0);
     8         return ret;
     9     }
    10     
    11     private void enumerate(int[] candidates, int target, List<List<Integer>> ret, List<Integer> temp, int pos) {
    12         if (target == 0) {
    13             ret.add(new ArrayList<Integer>(temp));
    14             return;
    15         }
    16         for (int i = pos; i < candidates.length; i++) {
    17             if (i > pos && candidates[i] == candidates[i - 1]) continue;
    18             if (candidates[i] > target) break;
    19             temp.add(candidates[i]);
    20             enumerate(candidates, target - candidates[i], ret, temp, i + 1);
    21             temp.remove(temp.size() - 1);
    22         }
    23     }
    24 }

    更多讨论:

    https://discuss.leetcode.com/category/48/combination-sum-ii

  • 相关阅读:
    「Python」pandas入门教程
    「Python」字符串操作内置函数
    「Python」10个python项目
    python-基础入门-序
    提取网站图片
    c#图片添加水印
    js获取url传递的参数
    构建之法阅读笔记01
    学习进度条<第一周>
    30道四则运算<1>
  • 原文地址:https://www.cnblogs.com/panini/p/6713358.html
Copyright © 2011-2022 走看看