给定一个数字列表,返回其所有可能的排列。
非递归(字典序算法) class Solution { public: /* * @param nums: A list of integers. * @return: A list of permutations. / vector<vector> permute(vector &nums) { // write your code here vector<vector > res; int n=nums.size(); int i=0,j=0,sum=1; int a,b; if(n==0) { res.push_back(nums); return res; } for(i=n;i>0;--i) sum=i; while(sum--) { res.push_back(nums); for(i=n-1;i>0;--i) { if(nums[i-1]<nums[i]) { a=i-1; goto part1; } } part1: for(j=n-1;j>i-1;--j) { if(nums[j]>nums[i-1]) { b=j; goto part2; } } part2: swap(nums[a],nums[b]); sort(nums.begin()+i,nums.end()); } return res; } }; 递归: void conv(vector& nums,vector<vector >& bak,int start){ if(nums.size() == start){ bak.push_back(nums); return; } for(int i = start; i < nums.size(); i++){ swap(nums[start],nums[i]); conv(nums,bak,start + 1); swap(nums[start],nums[i]); } } vector<vector > permute(vector &nums) { // write your code here vector<vector > res; if(nums.size()<=1) { res.push_back(nums); return res; } int n=nums.size(); sort(nums.begin(),nums.end()); res.push_back(nums); while(next_permute(res,nums,n-1)){ for(int s=0;s<n;s++) cout<<nums[s]<<' '; cout<<endl; } return res; }