zoukankan      html  css  js  c++  java
  • 组合总和

    组合总和

    题目:
    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

    candidates 中的数字可以无限制重复被选取。

    说明:

    所有数字(包括 target)都是正整数。
    解集不能包含重复的组合。
    示例 1:

    输入:candidates = [2,3,6,7], target = 7,
    所求解集为:
    [
    [7],
    [2,2,3]
    ]
    示例 2:

    输入:candidates = [2,3,5], target = 8,
    所求解集为:
    [
    [2,2,2,2],
    [2,3,3],
    [3,5]
    ]

    解题思路:运用回溯法解决

    class Solution {
        public List<List<Integer>> combinationSum(int[] candidates, int target) {
            List<List<Integer>> ans = new ArrayList();
            dfs(candidates, ans, new ArrayList(), 0, target);
            return ans;
        }
        
        private void dfs(int[] candidates, List<List<Integer>> ans, List<Integer> list, int cur, int target) {
            if(target < 0) {
                return ;
            }
            
            if(target == 0) {
                ans.add(new ArrayList(list));
                return ;
            }
            
            for(int i = cur; i < candidates.length; i++) {
                list.add(candidates[i]);
                dfs(candidates, ans, list, i, target - candidates[i]);
                list.remove(list.size() - 1);
            }
        }
    }
    
  • 相关阅读:
    BASIC-2 01字串
    BASIC-1 闰年判断
    BASIC-11 十六进制转十进制
    IO流之File类
    集合-下
    集合-上
    java常用类-下
    关于String的一些基础小题目
    java常用类-上
    异常
  • 原文地址:https://www.cnblogs.com/katoMegumi/p/14478497.html
Copyright © 2011-2022 走看看