lintcode 系列——15,16 Permutation

xiaoxiao2025-05-19  31

15 Permutation

Given a list of numbers, return all possible permutations.

Example

For nums = [1,2,3], the permutations are:

[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]

Code

class Solution: """ @param: nums: A list of integers. @return: A list of permutations. """ def permute(self, nums): # write your code here result = [] self.dfs(nums, [], result) return result def dfs(self, nums, res, reslist): if len(res) == len(nums): #终止条件,一次全排列完成 reslist.append(res) return for i in range(len(nums)): if nums[i] not in res: self.dfs(nums, res+[nums[i]], reslist) #最后输出需要把单个list按len(nums)重新组合一下

16 permutation 2

Given a list of numbers with duplicate number in it. Find all unique permutations.

Example

For numbers [1,2,2] the unique permutations are:

[ [1,2,2], [2,1,2], [2,2,1] ]

Idea

与15题非常相似,只是会出现重复元素 所以还是使用next_permutation来做,也还是需要先排序保证所有排列出现 但是需要增加一个lastv来判断这个新的vector是否与上一个相同,不相同的情况下才将其保存

Code

class Solution: """ @param: : A list of integers @return: A list of unique permutations """ def permuteUnique(self, nums): # write your code here if len(nums) == 0: return [[]] res = [] nums.sort() visited = [[False] for i in range(len(nums))] self.dfs(nums, [], res, visited) return res def dfs(self, nums, subset, result, visited): if len(nums) == len(subset): result.append(subset[:]) for i in range(len(nums)): if visited[i] ==True: continue if i-1>=0 and visited[i-1] ==True and nums[i-1] == nums[i]: continue visited[i] = True subset.append(nums[i]) self.dfs(nums, subset, result, visited) visited[i] = False subset.pop()

 

转载请注明原文地址: https://www.6miu.com/read-5030332.html

最新回复(0)