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]。