版权声明:本文为博主原创文章,未经博主允许不得转载。 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浅拷贝的性质有关。