目录
🍕题目
🍔回溯
1)先确定边界条件,if len(path) == k:
res.append(path[:])2) dfs(i + 1, path + [i]) 递归下一个元素
🍟代码
class Solution: def combine(self, n: int, k: int) -> List[List[int]]: def dfs(start, path): if len(path) == k: res.append(path) return upper_bound = n - (k - len(path)) + 1 for i in range(start, upper_bound + 1): dfs(i + 1, path + [i]) res = [] dfs(1, []) return res
🍕题目
🍔思路
path记录结果,cand.....没用过的元素 最上面 不断遍历的数字
利用切片将i元素去掉
🍟代码
class Solution: def permute(self, nums: List[int]) -> List[List[int]]: if len(nums) <= 1: return [nums] self.res = [] def recur(path,cand): if len(cand) == 0: self.res.append(path) for i,n in enumerate(cand): recur(path+[n],cand[:i]+cand[i+1:]) recur([],nums) return self.res
🍕题目
🍔思路
我们可以看到我们有三种选择
1.如果是大写则转换为小写
2.如果是小写则转换为大写
3.不进行转换
🍟代码
class Solution: def letterCasePermutation(self, s: str) -> List[str]: res = [] def dfs(idx, n, s:str): if idx == n: res.append(s) return if s[idx].islower(): dfs(idx + 1, n, s[:idx] + chr(ord(s[idx]) - 32) + s[idx + 1:]) if s[idx].isupper(): dfs(idx + 1, n, s[:idx] + chr(ord(s[idx]) + 32) + s[idx + 1:]) dfs(idx + 1, n, s) dfs(0, len(s), s) return res