题目描述
主要是要用到递归的思想
snew的作用是抽出一个元素,然后递归剩下的去找它的全排列
一开始觉得代码很难理解,可以用数学归纳法来理解递归,首先我们虽然没有完成这个函数,但是我们先认为我们这个函数可以完成输入数组的全排列,然后我们不断抽出一个元素然后再求snew的全排列,按照原理,直到len(nums)==0的情况,对应数学归纳法k=0时的情况的解我们自己给出,然后完成k=n-1推到k=n的情况,也就是把nums[i]给补上。
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
if len(nums)==0:
return [[]]
result=[]
for i in range(len(nums)):
snew=nums[:i]+nums[i+1:]
resultnew=self.permute(snew)
for j in resultnew:
j.append(nums[i])
result.append(j)
return result
还一种代码可以参考
def permute(self, nums):
ans = [nums]
for i in range(1, len(nums)):
m = len(ans)
for k in range(m):
for j in range(i):
ans.append(ans[k][:])
ans[-1][j], ans[-1][i] = ans[-1][i], ans[-1][j]
return ans