zoukankan      html  css  js  c++  java
  • BackTracking

    BackTracking (DFS)

    39. Combination Sum

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

    The same repeated number may be chosen from C unlimited number of times.

    Note:

    • All numbers (including target) will be positive integers.
    • The solution set must not contain duplicate combinations.

    For example, given candidate set [2, 3, 6, 7] and target 7
    A solution set is: 

    [
      [7],
      [2, 2, 3]
    ]
    public class Solution {
        public List<List<Integer>> combinationSum(int[] candidates, int target) {
            List<List<Integer>> res = new ArrayList<>();
            List<Integer> member = new ArrayList<Integer>();
            helper(res, member, candidates, target, 0);
            return res;
        }
        public void helper(List<List<Integer>> res, List<Integer> member, int[] candidates, int target, int start){
           if(target < 0)
                return;
           else if(target == 0){
                res.add(new ArrayList<Integer>(member)); //member is address
                return;
            }
            else{
                for(int i = start; i < candidates.length; i++){
                    member.add(candidates[i]);
                    helper(res, member, candidates, target - candidates[i], i );
                    member.remove(member.size() - 1); //make member empty!
                }
            }
        }
    }

    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.
    • 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]
    ]
    public class Solution {
        public List<List<Integer>> combinationSum2(int[] candidates, int target) {
            List<List<Integer>> res = new ArrayList<>();
            List<Integer> member = new ArrayList<>();
            Arrays.sort(candidates);
            boolean visit[] = new boolean[candidates.length];
            helper(res, member, visit, candidates, target, 0);
            return res;
        }
        public void helper(List<List<Integer>> res, List<Integer> member ,boolean[] visit, int[] candidates , int target ,int deep){
            if(target < 0)
                return ;
            else if(target == 0){
                res.add(new ArrayList<Integer>(member));
                return;
            }
            else{
                for(int i = deep; i < candidates.length; i++){
                    if(!visit[i]){
                        if (i > 0 && candidates[i] == candidates[i-1] && visit[i-1]==false) continue;
                        member.add(candidates[i]);
                        visit[i] = true;
                        helper(res, member, visit, candidates, target - candidates[i], i);
                        visit[i] = false;
                        member.remove(member.size() - 1);
                    }
                    
                }
            }
        }
    }
  • 相关阅读:
    jquery 实现 html5 placeholder 兼容password密码框
    php返回json的结果
    使用PHP读取远程文件
    Sharepoint 自定义字段
    Sharepoint 中新增 aspx页面,并在页面中新增web part
    【转】Sharepoint 2010 配置我的站点及BLOG
    JS 实现 Div 向上浮动
    UserProfile同步配置
    【转】Import User Profile Photos from Active Directory into SharePoint 2010
    Sharepoint 2010 SP1升级后 FIMSynchronizationService 服务无法开启
  • 原文地址:https://www.cnblogs.com/joannacode/p/5852568.html
Copyright © 2011-2022 走看看