目录

三个月算法进阶--day68

纯递归与dfs

dfs基本框架

if not s:
    return
ans = []
def dfs(args):
    if xxx == xxx:
        ans.append(yyy)
        return
    pass
dfs(args)
return ans

记录

leetcode剑指offer第38题字符串的排列

字符交换

class Solution:
    def permutation(self, s: str) -> List[str]:
        if not s:
            return []
        s = list(s)
        ans = []
        def dfs(x):
            if x == len(s) - 1:
                ans.append(''.join(s))
                return
            dic = set()
            for i in range(x, len(s)):
                if s[i] in dic:
                    # 剪枝
                    continue
                s[i], s[x] = s[x], s[i]
                dic.add(s[x])
                dfs(x+1)
                s[i], s[x] = s[x], s[i]
        dfs(0)
        return ans

dfs和回溯

有无状态重置