Backtracking
Permutations I
class Solution:
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res=[]
tmp=[]
self.generate(res,tmp,nums)
return res
def generate(self,res,tmp,nums):
if len(tmp)==len(nums):
tmp1=tmp.copy()
res.append(tmp1)
else:
for i in range(len(nums)):
if nums[i] in tmp:
continue
else:
tmp.append(nums[i])
self.generate(res,tmp,nums)
tmp.pop()
Permutation II
Remove the current element from array and put the new array into next recursion.
class Solution:
def permuteUnique(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res=[]
tmp=[]
length=len(nums)
nums.sort()
self.generate(res,tmp,nums,length)
return res
def generate(self,res,tmp,nums,length):
if len(tmp)==length:
tmp1=tmp.copy()
res.append(tmp1)
else:
for i in range(len(nums)):
if not i==0 and nums[i]==nums[i-1]:
continue
else:
tmp.append(nums[i])
nums1=nums.copy()
del(nums1[i])
self.generate(res,tmp,nums1,length)
tmp.pop()