Given a collection of distinct 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], [3,2,1] ]
求一个数列的全排列。
直接dfs即可。时间复杂度O(n^2),空间复杂度O(n)
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int> > ans;
if (nums.empty()) return ans;
sort(nums.begin(), nums.end());
vector<int> cur;
vector<bool> vis(nums.size(), false);
dfs(ans, nums, cur, vis);
return ans;
}
void dfs(vector<vector<int> >& ans, vector<int>& nums, vector<int>& cur, vector<bool>& vis) {
if (cur.size() == nums.size()) {
ans.push_back(cur);
return;
}
for (int i = 0; i < nums.size(); ++i) {
if (vis[i]) continue;
vis[i] = true;
cur.push_back(nums[i]);
dfs(ans, nums, cur, vis);
cur.pop_back();
vis[i] = false;
}
return;
}
};