leetcode 每日一题 46. 全排列

回溯法

思路:

DFS,深度优先搜索。

代码一:

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        def pathProcess(res:List[list],subNums:List[int],path:List[int]):
            if not subNums:
                res.append(path[:])
            for i in subNums:
                tempNum = subNums[:]
                path.append(i)
                tempNum.remove(i)
                pathProcess(res,tempNum,path)
                path.pop()
        res = []
        path = []
        pathProcess(res,nums,path)
        return res

代码二:

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        def pathProcess(first = 0):
            if  first==n:
                res.append(nums[:])
            for i in range(first,n):
                nums[first],nums[i] = nums[i],nums[first]
                pathProcess(first+1)
                nums[first],nums[i] = nums[i],nums[first]
                
        n = len(nums)
        res = []
        pathProcess()
        return res

猜你喜欢

转载自www.cnblogs.com/nilhxzcode/p/12978130.html
今日推荐