LC77 Combinations
2016-04-03 15:53
183 查看
可以用类似于DFS的方法去做。这道题目是LC78 Subsets的子问题。
对于LC78,另一个巧妙的做法是:我们可以先用一个整形数组(长度和nums相等),数组元素一开始都是1。把整个数组看成一个二进制数,然后模拟二进制减法,将这个数组一步一步减1减到0。每减一次1,对照这个二进制数组和nums数组,如果某个位置上二进制数组元素为1,则将nums数组相应位置上的数输出。这样就能输出所有的子集。
这里附上LC77的代码。
View Code
对于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
相关文章推荐
- ARM Cortex-A 编程手册学习笔记
- Android网络与数据存储_学习笔记_第六周:SQLite与ContentProvider
- 利用冒泡排序的思想对符合格式的时间字符串进行排序
- JAVA虚拟机-JMM内存模型(六)
- Java常见异常总结
- Linux目录结构和常用命令
- 欢迎使用CSDN-markdown编辑器
- 那些C++牛人的博客
- API集合框架-Set集合之HashSet
- 特殊字符\u2028导致的Javascript脚本异常
- 泪儿嗒
- 被事务代理的spring service 使用注解方式发布Dubbo服务
- Java I/O 模型的演进
- Android 百度地图API 定位 导航
- 陪伴
- strcpy的使用以及注意事项
- ccf题解
- 素数对猜想
- 初识安卓-打招呼
- 分布式存储