【LeetCode】47.全排列Ⅱ

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time: 2019/3/13
# @Author: xfLi
# The file...

"""
问题分析:
还是回溯法,只是这次,在进行深度优先搜索的之前,先进行一次排序,
目的就是为了把相同的数字放到一起,在每层选择中,如果同数字出现重复,
那么就选择一次,并依次类推。走到头,添加到输出数组,并回溯到上一层,直到结束。
"""

def permute(nums):
    nums.sort()
    res = []
    def depthOrderTraverse(nums=nums, path=[]):
        if not nums:
            res.append(path)
        for i in range(len(nums)):
            if i > 0 and nums[i] == nums[i-1]:
                continue
            depthOrderTraverse(nums[:i] + nums[i+1:], path + [nums[i]])
    depthOrderTraverse()
    return res

if __name__ == '__main__':
    nums = [3, 3, 0, 3]
    result = permute(nums)
    print(result)

猜你喜欢

转载自blog.csdn.net/qq_30159015/article/details/88537381