经典指数          
原因
1896
浏览数
0
收藏数
 

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], ]

     举报   纠错  
 
切换
1 个答案

classSolution {

public:

      vector > vec;    // 要返回的 vector

    voidfun(vector &vv,intii,intn,intk,intmx){  

//用于递归的 函数    n 当前层数   k 最大层数 

        if(n == k){     //递归 到 结尾处 时 将 vv 添加到 vec 中

            vec.push_back(vv);

            return;

        }

        for(inti=ii+1;i

            vv[n] = i;

            fun(vv,i,n+1,k,mx+1);        // 下一层 从 i 开始 到 mx+1 处结束

        }

    }

    vector > combine(intn, intk) {

        vector vv(k);       

        vec.clear();

        for(inti=1;i

            vv[0] = i;

            fun(vv,i,1,k,n-k+2+1);   

        }

        returnvec;

    }

};

上面有注释,下面是死路。。哦不,下面是思路,嘿嘿::

    参数中 有个 K ,最直接的想法 就是 写 K 个循环 ,但坑爹的是,K是个 变量 ,是在写不出来;

那么递归 来啦,,我们想一下 多叉树 要 怎么递归遍历 , 是的 一个子树一个子树 的走 就OK 啦;

这个也是一样,只要 掌握 好 每一层 需要从哪里 开始 和 到哪里结束 就 成功了 2/3;

就这些 ,之后的看代码吧;      66666

 
切换
撰写答案
扫描后移动端查看本题