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

    package LeetCode_40
    
    /**
     * 40. Combination Sum II
     * https://leetcode.com/problems/combination-sum-ii/description/
     *
     * Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target.
    Each number in candidates may only be used once in the combination.
    
    Note:
    All numbers (including target) will be positive integers.The solution set must not contain duplicate combinations.
    
    Example 1:
    Input: candidates = [10,1,2,7,6,1,5], target = 8,
    A solution set is:
    [
    [1, 7],
    [1, 2, 5],
    [2, 6],
    [1, 1, 6]
    ]
     * */
    class Solution {
        private val result = ArrayList<ArrayList<Int>>()
        /**
         * solution: dfs;
         * Time complexity:O(2^n): every step there is a choice to add the number to combination or not;
         * Space complexity:O(n)
         * */
        fun combinationSum2(candidates: IntArray, target: Int): List<List<Int>> {
            candidates.sort()
            dfs(0, candidates, target, ArrayList())
            return result
        }
    
        private fun dfs(start: Int, candidates: IntArray, target: Int, cur: ArrayList<Int>) {
            if (target < 0) {
                return
            }
            if (target == 0) {
                val temp = ArrayList(cur)
                result.add(temp)
                return
            }
            for (i in start until candidates.size) {
                //since each number in candidates may only be used once in the combination.
                if (i != start && candidates[i] == candidates[i - 1]) {
                    continue
                }
                cur.add(candidates[i])
                dfs(i + 1, candidates, target - candidates[i], cur)
                cur.removeAt(cur.size - 1)
            }
        }
    }
  • 相关阅读:
    栈和队列
    链表
    map
    二叉平衡树旋转
    二叉排序树详情
    红黑树详情
    查并集
    动态规划
    位操作
    字典树
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13114828.html
Copyright © 2011-2022 走看看