2021-01-24 Python百日打卡学习自【夸可编程】

'''
题目

给定一个没有重复数字的序列,返回其所有可能的全排列。
例子

permute([1,2,3]) ->
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
假设

输入的数组不为空
tips

回溯算法
'''

def permute1(nums):

    def backtrace(first = 0):
        if first == n:
            res.append(nums[:])
        for i in range(first, n):
            nums[first], nums[i] = nums[i], nums[first]
            backtrace(first + 1)
            nums[first], nums[i] = nums[i], nums[first]
        # pass
    n = len(nums)
    res = []
    backtrace()
    return res
    # pass

def permute(nums):
    m_dict = {}
    n = len(nums)

    for item in nums:
        m_dict.setdefault(item, 0)
        m_dict[item] += 1
    # print(m_dict)

    def backtrace(index):
        if index == n:
            return [[]]
        res = []
        for key in m_dict:
            if m_dict[key] == 0:
                continue
            m_dict[key] -= 1
            res.extend([[key] + res for res in backtrace(index + 1)])
            m_dict[key] += 1
        return res

    return backtrace(0)

print(permute([1,2,3]))

你可能感兴趣的:(2021-01-24 Python百日打卡学习自【夸可编程】)