zoukankan      html  css  js  c++  java
  • [LeetCode] Combination Sum

    Given a set of candidate numbers (C) (without duplicates) 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]
    ]

    使用回溯法求解。

    主要是对于辅助函数helper的构建

    void helper(vector<vector<int>>& res, vector<int>& tmp, vector<int>& candidates, int target, int idx);

    idx为遍历的头索引。

    helper(res, tmp, candidates[i], target - candidates[i], i);

    每次将target更新为选择池中的剩余目标值。i不变是因为组成target的值允许重复。

    class Solution {
    public:
        vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
            vector<vector<int>> res;
            vector<int> tmp;
            int idx = 0;
            helper(res, tmp, candidates, target, idx);
            return res;
        }
        
        void helper(vector<vector<int>>& res, vector<int>& tmp, vector<int>& candidates, int target, int idx) {
            if (target < 0) {
                return;
            }
            else if (target == 0) {
                res.push_back(tmp);
            }
            else {
                for (int i = idx; i < candidates.size(); i++) {
                    tmp.push_back(candidates[i]);
                    helper(res, tmp, candidates, target - candidates[i], i);
                    tmp.pop_back();
                }
            }
        }
    };
    // 16 ms
  • 相关阅读:
    java 反射
    java 面试题
    Java构造和解析Json数据的两种方法详解一
    JAVA UUID 生成
    tomcat 插件
    webstorm 激活码
    maven环境搭建
    svn 安装网站
    2015.6.30 反弹的教训(想做T)
    2015.6.15 惨跌开始的反思
  • 原文地址:https://www.cnblogs.com/immjc/p/8353396.html
Copyright © 2011-2022 走看看