Permutations II

xiaoxiao2021-02-27  127

题目详情:https://leetcode.com/problems/permutations-ii/description/

我的思路是在往集合中添加排列的时候,进行去重操作,即if path not in self.ans 但是导致超时,然后想其它的解决办法已知也没有想到[衰],后来看了答案。 答案的思路: 1、首先对nums中的元素个数进行统计。 2、对nums中的统计结果进行递归,这递归的过程有一些的技巧,对于重复的元素只递归一遍,不重复的元素也只递归一遍。 个人的一些理解: 1、对nums中的元素进行统计,这样可以保证在对不重复元素进行递归的时候,可以保证重复的元素连续在一起出现。比如[1,1,2],在对不重复元素2进行递归的时候,能够出现[2,1,1],即后边的1是连续出现的。 2、对重复,无重复的元素只递归一次可以保证不重复的元素出现在重复元素的中间。比如[1,2,1],不重复的元素2出现在了重复元素1的中间。在递归完[1,1,2],回的第二层递归的时候,由于已经对1递归完,取第二个元素进行递归,该元素为2,所以在接着递归的花,path为[1,2],在第三层递归上只需要将没有添加的另外一个元素1,添加即可。

个人理解如有错误,欢迎指正!

# -*- coding:utf-8 -*- class Solution(object): def permuteUnique(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ self.ans=[]#用来存储结果 mapping={} for e in nums:#统计元素的个数,这样能够保证重复的元素在一起,在一起出现。比如[1,1,2] mapping[e]=mapping.get(e,0)+1#能够连续出现[1,1,2]和[2,1,1] self.generatePermutations(mapping,[],len(nums)) return self.ans def generatePermutations(self,mapping,path,length): if length==0:#如果nums中的所有元素都已经在path中了 #print path self.ans.append(path)#那么将path添加到self.ans中 return for e in mapping:#对重复的元素只循环一次,无重复的元素也只循环一次了。比如[1,1,2] if mapping[e]==0:#这样能保证排列[1,2,1]出现。在循环完[1,1,2]之后,在第二层递归处 continue#因为已经对1已经递归完成,所以下次进行的递归的元素是2。因为对重复的元素只进行一次递归 else: mapping[e]=mapping[e]-1 self.generatePermutations(mapping,path+[e],length-1) mapping[e]=mapping[e]+1
转载请注明原文地址: https://www.6miu.com/read-17087.html

最新回复(0)