很经典很经典,虽然AC高但难度不小
/**当前的排列结果level,总结果res,访问标志visit,边界,level达到n个数**/class Solution {public: vector> permute(vector & nums) { if(nums.size()==0) return {}; int len=nums.size(); vector > res; vector level; vector visit(len,0); dfs(nums,res,level,visit); return res; } void dfs(vector &nums,vector >&res,vector &level,vector &visit){ if(level.size()==nums.size()){ res.push_back(level);return; } for(int i=0;i
采用深度优先搜索的代码(带注释)
class Solution {public: vector> permute(vector & nums) { vector > res; vector temp,visited(nums.size(),0); sort(nums.begin(),nums.end()); DFS(nums,0,visited,temp,res); return res; } void DFS(vector & nums,int index,vector & visited,vector & temp,vector >& res){ //递归边界,当一个排列的数达到n个后,即形成了一个排列 if(index==nums.size()){res.push_back(temp);return;} //递归形式:输出以nums[i]为第一个数的所有排列, for(int i=0;i