LC77 Combinations

Posted vaevaevae

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC77 Combinations相关的知识,希望对你有一定的参考价值。

可以用类似于DFS的方法去做。这道题目是LC78 Subsets的子问题。

对于LC78,另一个巧妙的做法是:我们可以先用一个整形数组(长度和nums相等),数组元素一开始都是1。把整个数组看成一个二进制数,然后模拟二进制减法,将这个数组一步一步减1减到0。每减一次1,对照这个二进制数组和nums数组,如果某个位置上二进制数组元素为1,则将nums数组相应位置上的数输出。这样就能输出所有的子集。

这里附上LC77的代码。

技术分享
 1 class Solution {
 2 private:
 3     vector<vector<int> > ret;
 4     vector<int> a;
 5 public:
 6     void solve(int dep, int maxDep, int n, int start)
 7     {
 8         if (dep == maxDep)
 9         {
10             ret.push_back(a);
11             return;
12         }
13         int last=n+1-(maxDep-dep);
14         for(int i = start; i <= last ; i++)
15         {
16             a[dep] = i;
17             solve(dep + 1, maxDep, n, i + 1);
18         }      
19     }
20     
21     vector<vector<int> > combine(int n, int k) {
22         a.resize(k);
23         ret.clear();
24         solve(0, k, n, 1);
25         return ret;
26     }
27 };
View Code

 

以上是关于LC77 Combinations的主要内容,如果未能解决你的问题,请参考以下文章

个人记录-LeetCode 77. Combinations

[Lintcode]152. Combinations/[Leetcode]77. Combinations

leetcode-Combinations-77

[LC] 254. Factor Combinations

77. Combinations

77. Combinations