• lintcode-135-数字组合


    135-数字组合

    给出一组候选数字(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T。C中的数字可以无限制重复被选取。
    例如,给出候选数组[2,3,6,7]和目标数字7,所求的解为:
    [7],
    [2,2,3]

    注意事项

    所有的数字(包括目标数字)均为正整数。
    元素组合(a1, a2, … , ak)必须是非降序(ie, a1 ≤ a2 ≤ … ≤ ak)。
    解集不能包含重复的组合。

    样例

    给出候选数组[2,3,6,7]和目标数字7
    返回 [[7],[2,2,3]]

    标签

    回溯法 数组

    思路

    首先对候选数字排序、剔重,然后采取回溯和递归

    code

    class Solution {
    public:
        /**
         * @param candidates: A list of integers
         * @param target:An integer
         * @return: A list of lists of integers
         */
        vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
            // write your code here
            int size = candidates.size();
            if(size <= 0) {
                return vector<vector<int> >();
            }
            vector<vector<int> > result;
            vector<int> temp;
    
            sort(candidates.begin(), candidates.end());  
            candidates.erase(unique(candidates.begin(), candidates.end()), candidates.end()); 
            combinationSum(candidates, temp, 0, 0, target, result);
    
            return result;
        }
    
        void combinationSum(vector<int> &candidates, vector<int> &temp, int sum, int current, int target, vector<vector<int> > &result) {
            if(sum == target) {
                result.push_back(temp);
                return ;
            }
            else if(sum > target) {
                return ;
            }
            
            for(int i=current; i<candidates.size(); i++) {  
                temp.push_back(candidates[i]);
                sum += candidates[i];
                combinationSum(candidates, temp, sum, i, target, result);  
                sum -= temp[temp.size()-1];  
                temp.pop_back();  
            } 
        }
    };
    
  • 相关阅读:
    慕课前端入门-HTML5属性变化
    黑马jQuery教程4
    黑马jQuery教程3
    黑马JQuery教程2
    2017-03-15
    按钮图标化
    AES MFC实现
    CButtonST类简介使用方法
    VS资源编辑器常见错误RC1000到RC1208
    MFC单文档程序添加HTML帮助支持
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7219851.html
Copyright © 2020-2023  润新知