LC46. 全排列

class Solution(object):
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        res = []
        sol = []
        vsd = [0]*len(nums)
        def backtrack(nums,sol,vsd):
            if len(sol) == len(nums):
                res.append(sol[:])
            for i in range (len(nums)):
                if vsd[i] == 1:
                    continue
                vsd[i] = 1
                sol.append(nums[i])
                backtrack(nums,sol,vsd)
                vsd[i] = 0
                sol.pop()
        backtrack(nums,sol,vsd)
        return res

解释for循环: dfs到[1,2,3]之后return,此时nums[i]的i=2,
(1)继续执行for循环中dfs语句后面的语句,将used[2]重置后到达末尾,回到for循环的++i语句,此时i=3跳出循环。
又return到i=1,继续步骤(1),重置used[1]后进入i=2,也就是之前疑惑的地方:回退到[1]之后,直接走到[3],得到path=[1,3]。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值