Given a collection of numbers, return all possible permutations.
For example,
[1,2,3]
have the following permutations:
[1,2,3]
, [1,3,2]
, [2,1,3]
, [2,3,1]
, [3,1,2]
, and [3,2,1]
.
第一位和2,3,..n-1互换, 固定第一, 2和3...n-1互换。。。直到第n-1位固定,就是所有的组合了。。。
class Solution {
public:
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int> > res;
permute(num, 0, num.size() - 1, res);
return res;
}
void permute(vector<int> &input, int k, int n, vector<vector<int> > &res) {
if (k == n) {
res.push_back(input);
} else {
for (int i = k; i <= n; i++) {
int tmp = input[i];
input[i] = input[k];
input[k] = tmp;
permute(input, k + 1, n, res);
input[k] = input[i];
input[i] = tmp;
}
}
}
};