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)
            }
        }
    }
  • 相关阅读:
    纯JavaScript实现HTML5 Canvas六种特效滤镜
    玩转html5 的 canvas画图
    为什么 ++[[]][+[]]+[+[]] = 10?
    作用域和闭包
    7 个令人惊讶的 JavaScript “特
    60个有用css代码片段
    函数
    数组
    我们为什么要尝试前后端分离
    javascript面向对象——构造函数和原型对象
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13114828.html
Copyright © 2011-2022 走看看