zoukankan      html  css  js  c++  java
  • [leetcode]Combinations

    问题描写叙述:

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

    For example,
    If n = 4 and k = 2, a solution is:

    [
      [2,4],
      [3,4],
      [2,3],
      [1,2],
      [1,3],
      [1,4],
    ]
    

    基本思想:

    回溯法

    代码:

     vector<int> record;         //C++
        vector<vector<int> >result;
        set<vector<int> > myset;
        int kNum = 0;
        
        void addSolution(){
            vector<int> tmp(record.begin(),record.end());
            sort(tmp.begin(),tmp.end());
            if(myset.find(tmp) == myset.end()){
                result.push_back(tmp);
                myset.insert(tmp);   
            }
        }
        void subCombinationSum(vector<int> &cadidates,int bpos,vector<int> &base, int k){
            if(kNum == k){
                addSolution();
            }
            
            int size = cadidates.size();
            for(int i = bpos; i < size; i++){
                if(base[i] == 1)
                    continue;
                    
                record.push_back(cadidates[i]);
                base[i] = 1;
                kNum++;
                subCombinationSum(cadidates,<span style="color:#FF0000;"><strong>i+1</strong></span>,base,k);  //i+1  避免反复
                record.pop_back();
                base[i] = 0;
                kNum--;
            }
        }
        
        vector<vector<int> > combine(int n, int k) {
            vector<int> candidates(n);
            for(int i = 0; i < n; i++)
                candidates[i] = i+1;
            vector<int> base(candidates.size(),0);
            subCombinationSum(candidates,0,base,k);
            return result;
        }


  • 相关阅读:
    机器学习的定义和分类
    选股
    mysql修改密码
    快速排序
    php的错误类型
    MySQL数据库优化
    库存超卖问题
    循环处理
    kafka安装配置
    JavaScript、jQuery杂记
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6920107.html
Copyright © 2011-2022 走看看