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;
        }


  • 相关阅读:
    MicXP程序爱好者
    cnblogs上的mysql学习心得
    iwebship 购物系统 PHP lamp环境
    可以购买的网址
    模板网址
    学习ecshop 教程网址
    ecshop数据库操作函数
    yzoj1568: 数字组合 题解
    yzoj1891 最优配对问题 题解
    yzoj1985 最长公共单调上升子序列 题解
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6920107.html
Copyright © 2011-2022 走看看