题目描述
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法1:回溯
典型的回溯问题,构建一个used数组,来确定当前数字是否已在该序列中,进行回溯,
注意:回溯的重点是返回上一层时要将状态复原
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| class Solution { public: vector<vector<int>> permute(vector<int>& nums) { int n=nums.size(); int count=0; bool *used=new bool [n](); findall(nums,used,count,n); return res; } void findall(vector<int>& nums,bool *used,int count,int n) { if(count==n) { res.push_back(pre); return ; } int i; for(i=0;i<n;i++) { if(!used[i]) { used[i]=true; pre.push_back(nums[i]); findall(nums,used,count+1,n); pre.pop_back(); used[i]=false; } } return ; } private: vector<vector<int>> res; vector<int> pre; };
|