Combinations
2015-10-13 05:06
197 查看
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:
Analyse:
Backtracking. For each number i from 1...n, choose i and fix it, for i + 1...n, do the same thing until the temp vector's size equals to k. Be cautious that we can't use depth == k as the condition, because the depth is always changing and the amount of numbers we want to pick up is no larger than n. So the depth information is not accurate. Suppose k = 3, n = 8, and we encounter 1, 2, 8 as the temp vector, the depth is 8 while it doesn't equals to k. However, we can intuitively realize that this vector should be placed into the result.
Runtime: 12ms
For example,
If n = 4 and k = 2, a solution is:
[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
Analyse:
Backtracking. For each number i from 1...n, choose i and fix it, for i + 1...n, do the same thing until the temp vector's size equals to k. Be cautious that we can't use depth == k as the condition, because the depth is always changing and the amount of numbers we want to pick up is no larger than n. So the depth information is not accurate. Suppose k = 3, n = 8, and we encounter 1, 2, 8 as the temp vector, the depth is 8 while it doesn't equals to k. However, we can intuitively realize that this vector should be placed into the result.
Runtime: 12ms
class Solution { public: vector<vector<int>> combine(int n, int k) { vector<vector<int> > result; if(n < k || n <= 0) return result; vector<int> temp; helper(result, temp, n, k, 1); return result; } void helper(vector<vector<int> >& result, vector<int>& temp, int n, int k, int depth){ if(temp.size() == k){ result.push_back(temp); return; } for(int i = depth; i <= n; i++){ temp.push_back(i); helper(result, temp, n, k, i + 1); temp.pop_back(); } } };
相关文章推荐
- NSLog效率低下的原因及尝试lldb断点打印Log
- Permutations II
- 美国人吃不吃转基因食品?
- charles 3.11对于cipher限制 Received fatal alert: handshake_failure
- Nim Game leetcode 292
- Codeforces Round #325 C Gennady the Dentist
- RedHat7配置IdM server
- 20151012 C# 第一篇 字符与字符串
- 20151011 C# 第一篇 运算符
- Linux 编译安装Cmake
- http://web1.sycsec.com/b33804a7301e583ca6a473c1c092b09f/
- RabbitMQ实例教程:路由选择
- Permutations
- 一键获取隐藏Wi-Fi SSID:利用Python和Scapy发现隐藏无线热点
- Nim Game
- bootstrap-switch.js,让checkbox美起来
- 了解Promise Angular(转)
- 新的开始——写给自己的话
- PD中将Comment 从Name复制值
- XMPPFramework框架的导入