给定一个数字列表,返回其所有可能的排列 lintcode

描述:

给出一个列表[1,2,3],其全排列为:

[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

c++实现代码如下

class Solution {
public:
    /*
     * @param nums: A list of integers.
     * @return: A list of permutations.
     */
    vector> permute(vector& nums)  {  
       vector> bak;  
       int n = nums.size() ;  
       if(n == 0) {
           bak.push_back(nums);
           return bak;
       }
       sort(nums.begin(),nums.end());  
       conv(nums,bak,0);  
       return bak;          
   }  
   void conv(vector& nums,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]); 
       }  
   }  
};

你可能感兴趣的:(给定一个数字列表,返回其所有可能的排列 lintcode)