您的位置:首页 > 其它

LC77 Combinations

2016-04-03 15:53 183 查看
可以用类似于DFS的方法去做。这道题目是LC78 Subsets的子问题。

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

这里附上LC77的代码。

class Solution {
private:
vector<vector<int> > ret;
vector<int> a;
public:
void solve(int dep, int maxDep, int n, int start)
{
if (dep == maxDep)
{
ret.push_back(a);
return;
}
int last=n+1-(maxDep-dep);
for(int i = start; i <= last ; i++)
{
a[dep] = i;
solve(dep + 1, maxDep, n, i + 1);
}
}

vector<vector<int> > combine(int n, int k) {
a.resize(k);
ret.clear();
solve(0, k, n, 1);
return ret;
}
};


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: