Lint Code:一天一道算法題_2(帶重複數字的全排列,遞歸算法)

題目描述

給出一個具有重複數字的列表,找出列表所有不同的排列。

#樣例1
輸入:[1,1]
輸出:
[
  [1,1]
]

#樣例2
輸入:[1,2,2]
輸出:
[
  [1,2,2],
  [2,1,2],
  [2,2,1]
]

題目鏈接:帶重複數字的全排列

python實現

#去掉重複的排列
def unique(nums):
    begin=0
    end=len(nums)
    result=[]
    if end==0:
        return [[]]
    fullarray(begin,end,nums,result)
    result.sort()
    i = 0
    while i < len(result) - 1:
        if result[i] == result[i + 1]:
            del result[i]
        else:
            i += 1
    return result
#遞歸
def fullarray(begin,end,nums,result):
    if begin==end:
        k=nums[:]
        result.append(k)
    else:
        for i in range(begin,end):
            nums[begin],nums[i] = nums[i],nums[begin]
            fullarray(begin+1,end,nums,result)
            nums[begin],nums[i] = nums[i],nums[begin]
if __name__=="__main__":
    nums=[1,1,2,3,1,2]
    allresult=unique(nums)
    print(allresult)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章