您的位置:首页 > 娱乐 > 八卦 > 再谈全排列

再谈全排列

2024/12/22 18:49:47 来源:https://blog.csdn.net/qq_19859865/article/details/141935397  浏览:    关键词:再谈全排列

题目链接: . - 力扣(LeetCode)

每次做全排列的题目,我都要孕育好一阵子,到底怎么去思考这个问题呢?

首先,我觉得最好的方式就是画个树。

画了树之后,你就知道,这个问题,是一个循环遍历的问题,但是再遍历的过程中,你需要基于过去的状态(哪些元素被存储了),改变你之后的行为。

此外。我们还需要考虑终止条件,然后,这是一个回溯的问题,那么你需要考虑的就是回溯之后需要怎样的处理。

我们来一一回答这些问题

1. 如果保存过去的状态

我们可以通过一个mask,来记录哪些元素被传入了。

2. 如何设定终止条件

我们可以判断list的长度,如果list的长度和原数组一致,我们就可以保存。

3. backtrack之后的状态重置

我们需要重置两个状态,一个是path中的元素,另一个是遍历到的元素的判断。

class Solution(object):def permute(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""path = []result = []def backtrack(nums, used):if(len(path) == len(nums)):result.append(path[:])returnfor i,ele in enumerate(nums):if(used[i] == False):path.append(ele)used[i] = True            backtrack(nums,used)path.pop()used[i] = Falsereturn result used = [False] * len(nums)result = backtrack(nums, used)return result

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com