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
  • 相关阅读:
    金融法规
    大型网站架构演化
    用一张决策图来重新思考你的网站
    互联网产品的一般商业模式
    怎样开始冥想
    创造安宁舒适工作日的17个办法
    人生规划和GTD——"知"、"得"与"合"
    立即行动的七个方法
    文件归档的学问
    入门GTD时间管理系统必读
  • 原文地址:https://www.cnblogs.com/immjc/p/8353396.html
Copyright © 2011-2022 走看看