46. Permutations(python+cpp)
阿新 • • 發佈:2018-11-23
題目:
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淺拷貝的性質有關。