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

    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]
    ]
    
    
    

    解析

    • 这道题跟之前那道 Combination Sum 组合之和 本质没有区别,只需要改动一点点即可,之前那道题给定数组中的数字可以重复使用,而这道题不能重复使用,只需要在之前的基础上修改两个地方即可,首先在递归的for循环里加上if (i > start && num[i] == num[i - 1]) continue; 这样可以防止res中出现重复项,然后就在递归调用combinationSum2DFS里面的参数换成i+1,这样就不会重复使用数组中的数字了
    // add 40. Combination Sum ii
    class Solution_40 {
    public:
    
    	void dfs(vector<vector<int>> &vecs, vector<int> &vec, int i, int target, vector<int> &candidates)
    	{
    		if (target == 0)
    		{
    			vecs.push_back(vec);
    			return;
    		}
    		if (target < 0)
    		{
    			return;
    		}
    		// 1 1 2 5 6 (1,1,6;1 2 5)
    		for (int k = i; k < candidates.size(); k++)
    		{
    			if (k>i && candidates[k] == candidates[k - 1]) //k>0 bug
    			{
    				continue;
    			}
    			vec.push_back(candidates[k]);
    			dfs(vecs, vec, k+1, target - candidates[k], candidates);
    			vec.pop_back();
    		}
    		return;
    	}
    
    	// 默认有序
    	vector<vector<int> > combinationSum2(vector<int> &candidates, int target) {
    		vector<vector<int>> vecs;
    		vector<int> vec;
    		if (candidates.size() == 0)
    		{
    			return vecs;
    		}
    		sort(candidates.begin(), candidates.end());
    		dfs(vecs, vec, 0, target, candidates);
    
    		return vecs;
    	}
    };
    

    题目来源

  • 相关阅读:
    hdu 1863 畅通工程
    poj 2524 Ubiquitous Religions
    04 Linux终端命令01
    05 linux中yum源报错
    Filterg过滤器和Listener监听器
    03 Centos的文件目录、远程连接工具及快照操作
    02 安装虚拟机以及设置虚拟机网卡信息
    01VM虚拟机介绍及配置虚拟机网卡信息
    Jstl表达式
    EL表达式
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8416604.html
Copyright © 2011-2022 走看看