【leetcode】Permutations

题目描述:

Given a collection of 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].

解题思路:

这道题目由于是求所有的全排列,比较直观的方法就是递归了

class Solution:
    # @param num, a list of integer
    # @return a list of lists of integers

    def permute(self,l):  
        if(len(l)<=1):  
            return [l]  
        r=[]
        for i in range(len(l)):  
            s=l[:i]+l[i+1:]  
            p=self.permute(s)  
            for x in p:  
                r.append(l[i:i+1]+x)  
        return r

s = Solution()
print s.permute([1,2,3])

C++版

class Solution {
public:
    void permutation(vector<vector<int>>& res, vector<int>& nums, int depth) {
        if(depth==nums.size()-1) res.push_back(nums);
        for(int i=depth; i < nums.size(); ++i){
            swap(nums[i], nums[depth]);
            permutation(res, nums, depth+1);
            swap(nums[i], nums[depth]);
        }
    }
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> res;
        permutation(res, nums, 0);
        return res;
    }
};
posted @ 2014-12-22 17:10  mrbean  阅读(212)  评论(0编辑  收藏  举报