LeetCode 47 [Permutations II]

原題

給出一個具有重復(fù)數(shù)字的列表,找出列表所有不同的排列

給出列表[1,2,2],不同的排列有:

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

解題思路

  • 首先數(shù)組排序,跳出recursion條件為len(path) == len(num)
  • 設(shè)置一個flag數(shù)組,來判定一個元素是否被訪問過
  • 如果previous沒有被訪問,而且current == previous,則會出現(xiàn)重復(fù),所以跳過

完整代碼

class Solution(object):
    def permuteUnique(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        result = []
        flags = [False] * len(nums)
        self.permuteForReal(sorted(nums), result, flags, [])
        return result

    def permuteForReal(self, num, output, flags, path):
        if len(path) == len(num):
            output.append(path[:])
            return
         
        for i in range(len(num)):
            if not flags[i]:
                if i != 0 and not flags[i-1] and num[i] == num[i-1]:
                    continue
                path.append(num[i])
                flags[i] = True
                self.permuteForReal(num, output, flags, path)
                path.pop()
                flags[i] = False
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容