leetcode 46. Permutations

Posted by Johnnwen on May 31, 2016

leetcode 46. Permutations

题意

Given a collection of distinct numbers, return all possible permutations.

For example

[1,2,3] have the following permutations:

[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].

代码
解法一(STL
class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int> > res;
        if (nums.empty())
            return res;

        sort(nums.begin(), nums.end());
        res.push_back(nums);
        while (next_permutation(nums.begin(), nums.end()))
            res.push_back(nums);

        return res;
        
    }
};

解法二(DFS)
class Solution {  
private:  
    void dfs(int i, vector<int>& nums,vector<vector<int>>& res) {  
        if(i==nums.size()) { 
            res.push_back(nums);  
            return;  
        }  
        for(int j=i;j<nums.size();j++) {  
            int tmp = nums[i];  
            nums[i]  = nums[j];  
            nums[j]  = tmp;  
            dfs(i+1,nums,res);  
            tmp = nums[i];  
            nums[i]  = nums[j];  
            nums[j]  = tmp;  
        }  
    }  
public:  
    vector<vector<int>> permute(vector<int>& nums) { 
        vector<vector<int> > res;
        
         if (nums.empty())
            return res;
            
        
        dfs(0,nums,res);  
          
        return res;  
    }  
};