zoukankan      html  css  js  c++  java
  • Leetcode 216. 组合总和 III dfs

    地址 https://leetcode-cn.com/problems/combination-sum-iii/

    找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
    
    说明:
    所有数字都是正整数。
    解集不能包含重复的组合。 
    
    示例 1:
    输入: k = 3, n = 7
    输出: [[1,2,4]]
    
    示例 2:
    输入: k = 3, n = 9
    输出: [[1,2,6], [1,3,5], [2,3,4]]
    

    解答
    题目的数据范围不大 就是9个数字的从小到大的组合。
    使用dfs深度搜索 将所有数字的组合排列出来,检出符合条件的答案。
    注意,不能包含重复组合。那么我们在搜索尝试的时候 需要选择比上一个数字大的数字进行尝试。

    class Solution {
    public:
        vector<vector<int>> ans;
        vector<int> numsHash;
        bool Check(const vector<int>& v,int n){
            int sum = 0;
            for(auto& e:v){
                sum += e;
            }
            return sum == n;
        }
    
        void dfs(int k ,int n , vector<int>& v){
            if(v.size() == k){
                if(Check(v,n)){
                    ans.push_back(v);
                }
                return ;
            }
            int startval = 1;
            if(!v.empty()){
                startval = v.back()+1;
            }
            for(int i =startval;i<=9;i++){
                if(numsHash[i] ==0){
                    v.push_back(i);
                    dfs(k,n,v);
                    v.pop_back();
                }
            }
    
            return;
        }
    
        vector<vector<int>> combinationSum3(int k, int n) {
            vector<int> v;
            numsHash.resize(10);
            dfs(k,n,v);
            return ans;
        }
    };
    

    我的视频题解空间

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    MySQL 日志管理
    nginx 日志分割
    Canvas 动态小球重叠效果
    Canvas制作动态进度加载水球
    js 多张爆炸效果轮播图
    js 多张图片加载 环形进度条
    INSTALL_FAILED_CONFLICTING_PROVIDER
    安卓 文件管理器 各种应用 源码
    android 静音
    android studio 查看大纲
  • 原文地址:https://www.cnblogs.com/itdef/p/15253849.html
Copyright © 2011-2022 走看看