lintcode練習-16.重複する要素の配置
1295 ワード
16.繰り返し要素の配置
重複する数値を持つリストを与え、リストのすべての異なる配列を見つけます.
サンプル
リスト
に挑戦
再帰と非再帰を使用して、この問題をそれぞれ完了します.
問題解決の考え方:
重複する数値を持つリストを与え、リストのすべての異なる配列を見つけます.
サンプル
リスト
[1,2,2]
が与えられ、異なる配列は以下の通りである.[
[1,2,2],
[2,1,2],
[2,2,1]
]
に挑戦
再帰と非再帰を使用して、この問題をそれぞれ完了します.
問題解決の考え方:
class Solution:
"""
@param: : A list of integers
@return: A list of unique permutations
"""
def permuteUnique(self, nums):
# write your code here
self.res = []
if nums == None:
return self.res
nums = sorted(nums)
# ,
self.dfs(nums, [False for x in range(len(nums))], [])
return self.res
def dfs(self, nums, boolean, permutation):
if len(permutation) == len(nums):
self.res.append(permutation[:])
return
for i in range(0, len(nums)):
# ,
if boolean[i]:
continue
if i > 0 and nums[i] == nums[i-1] and boolean[i-1] == False:
continue
permutation.append(nums[i])
boolean[i] = True
self.dfs(nums, boolean, permutation)
boolean[i] = False
permutation.pop()