力扣刷题(python)50天——第十七天:全排列
题目描述
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法
拿到后主要思想还是想这多简单,遍历不就得了。但细想一下发现问题根源在于我无法设置一个N重嵌套的循环,因此我想能否用递归的思想来做。
解答
写的可能有点绕。。。改过很多次
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
global ans
global s
ans=[]
l=len(nums)
for i in range(l):
s=[]
s.append(nums[i])
rec=nums[i]
nums.remove(rec)
flag=s[:-1]
self.find(nums)
s=flag
nums.insert(i,rec)
return ans
def find(self,nums):
global ans
global s
l=len(nums)
if l==0:
tmp=list(s)
ans.append(tmp)
else:
for i in range(l):
s.append(nums[i])
rec=nums[i]
nums.remove(rec)
flag=s[:-1]
self.find(nums)
s=flag
nums.insert(i,rec)
执行结果
心得:
个人觉得递归很简单,我对递归的理解是,递归分两种:
一是通过递归对全局变量(如列表)进行操作或进行其他如print()的操作,总之就是操作某个东西,可以没有return
二是通过递归最终求某个变量,一定会有递归结束的return返回值