46. Permutations(python+cpp)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21275321/article/details/84308011

题目:

Given a collection of distinct integers, return all possible permutations.
Example:

Input: [1,2,3] 
Output: 
[   
[1,2,3],   
[1,3,2],  
[2,1,3],   
[2,3,1],  
[3,1,2],   
[3,2,1] 
]

解释:
经典的回溯法的题目,其实可以直接用itertools.permutations

from itertools import permutations
class Solution:
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        return list(permutations(nums,len(nums)))

正规的写法还是dfs。
将整组数中的所有的数分别与第一个数交换,这样就总是在处理后n-1个数的全排列。
python代码:

class Solution(object):
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        self.result=[]
        self.n=len(nums)
        def dfs(nums,curfirst):
            if curfirst==self.n:
                self.result.append(nums[:])
            for i in range(curfirst,self.n):
                nums[curfirst],nums[i]=nums[i],nums[curfirst]
                dfs(nums,curfirst+1)
                nums[curfirst],nums[i]=nums[i],nums[curfirst]
        dfs(nums,0)
        return self.result

c++代码:

class Solution {
public:
    vector<vector<int>> result;
    int n;
    vector<vector<int>> permute(vector<int>& nums) {
        n=nums.size();
        dfs(nums,0);
        return result;
    }
    void dfs(vector<int>& nums,int curFirst)
    {
        if (curFirst==n)
        {
            result.push_back(nums);
        }
        for (int i=curFirst ;i<n;i++)
        {
            swap(nums[i],nums[curFirst]);
            dfs(nums,curFirst+1);
            swap(nums[i],nums[curFirst]);
        }
    }
};

总结:
c++不需要像python那样再拷贝一个list出来再append到result里面,与python浅拷贝的性质有关。

猜你喜欢

转载自blog.csdn.net/qq_21275321/article/details/84308011