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], ]
class Solution {
public:
vector<vector<int> > combine(int n, int k) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
assert(n>=k);
assert(k>0);
vector<vector<int> >results;
queue<vector<int> >temp;
temp.push(vector<int>());
while(!temp.empty()){
vector<int> current= temp.front();
temp.pop();
int val;
if (current.size()>0)
val = current.at(current.size()-1);
else
val = 0;
current.push_back(0);
for(int i = val+1; i<= n; i++){
current[current.size()-1]= i;
if (current.size() == k)
results.push_back(current);
else
temp.push(current);
}
}
return results;
}
};
1. 比DP做要簡單的多,DP的代碼弄了好久也沒弄清楚
2. 注意queue的用法,以及vector中取最後一個值可以用back