题目:
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]
.
思路:递归,枚举所有情况。
class Solution {
public:
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
void permute_helper(vector<int>& num, int pos, vector<vector<int>>& result) {
if (pos == (int)num.size()) {
result.push_back(num);
return;
}
for (int i = pos; i < (int)num.size(); ++i) {
swap(num[pos], num[i]);
permute_helper(num, pos + 1, result);
swap(num[pos], num[i]);
}
}
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int>> result;
permute_helper(num, 0, result);
return result;
}
};
总结:复杂度O(n!). (?)