给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路:这里没有重复数字。不能重复使用数字。回溯算法。
1.visit数组来记住是否被访问过。
2.一个trace数组用来记录访问的顺序。
3.结束条件:trace数组的个数等于原数组个数。
class Solution { public: vector<vector<int>> permuteUnique(vector<int>& nums) { // set<vector<int>> va; vector<int> trace; vector<vector<int>> va1; vector<int> visited(nums.size(),0); permuteUnique(va1,trace,nums,visited); return va1; } void permuteUnique(vector<vector<int>> &va,vector<int> &trace,vector<int> &nums,vector<int> &visited) { if(nums.size()==trace.size()) { va.push_back(trace); } for(int i=0;i<nums.size();i++) { if(visited[i]==1) continue; visited[i]=1; trace.push_back(nums[i]); permuteUnique(va,trace,nums,visited); trace.pop_back(); visited[i]=0; } } };
原文:https://www.cnblogs.com/buzhidao1/p/12709228.html