Leetcode ——46.全排列问题

全排列

题目描述

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

输入: [1,2,3]
输出:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

题目理解

对给定数组里面的数进行全排列,最后返回一个有 C n n C_n^n 个排列的数组

实现代码

class Solution(object):
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        res = []
        visited = [True] * len(nums)# 生成一个数组   [True, True, True]
        self.dfs(nums, 0, [], res, visited)
        return res

    def dfs(self, nums, pos, temp, res, visited):
        if pos == len(nums):# pos = len(nums)时将temp添加到res
            res.append(temp[:])
            return

        for i in range(len(nums)):
            if visited[i]:
                visited[i] = False #将True变为False
                temp.append(nums[i])
                self.dfs(nums, pos + 1, temp, res, visited)
                visited[i] = True
                temp.pop()# 弹出最上面的一个元素

if __name__ == '__main__':
    print(Solution().permute(["2","3","4"]))

猜你喜欢

转载自blog.csdn.net/Heitao5200/article/details/84772009