classSolution:defpermute(self, nums: List[int])-> List[List[int]]:n =len(nums)ans =[]path =[0]* n # 所有排列的长度都是一样的 ndefdfs(i, s):# 从答案的角度,第i个位置该从s中选择哪一个。if i==n:ans.append(path.copy())returnfor x in s:path[i]= xdfs(i+1, s-{x})dfs(0,set(nums))return ans
回溯的时间复杂度就是 路径长度*叶子节点 个数,这道题 n ! n! n! 个叶子节点,每个叶子节点个数为 n ! n! n!。
二、51. N 皇后
代码:
classSolution:defsolveNQueens(self, n:int)-> List[List[str]]:ans =[]col =[0]* ndefvalid(r, c):for R inrange(r):C = col[R]if C == c or r+c == R+C or r-c == R-C:returnFalsereturnTruedefdfs(r,s):if r==n:ans.append(["."*c +"Q"+"."*(n-1-c)for c in col])returnfor c in s:if valid(r, c):col[r]= cdfs(r+1, s-{c})dfs(0,set(range(n)))return ans