递归
递归三要素
- 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。
- 确定终止条件
- 确定单层递归的逻辑
二叉树递归题集(估计不考二叉树)
337. 打家劫舍 III
124.二叉树中的最大路径和(困难)
112.路径总和
113.路径总和II
回溯
- 请认识这一点:回溯是一种暴力搜索的算法
- 如何把回溯化虚为实(写出代码):画树形图,理解树的宽度和深度
- 如何终止回溯:需要终止条件
回溯三要素及模板
- 回溯函数模板返回值以及参数
- 回溯函数终止条件
- 回溯搜索的遍历过程
def backtracking(parameters):
if 终止条件 == True:
存放结果
return
for 选择:本层集合中元素(树中节点孩子的数量就是集合的大小) {
处理节点
backtracking(路径,选择列表) # 递归
回溯,撤销处理结果
回溯题集
46.全排列
47.全排列II
77.组合
79.单词搜索
51.N皇后
52.N皇后II
37.解数独
岛屿问题合集
695. 岛屿的最大面积
200.岛屿数量
1905.统计子岛屿
1254.统计封闭岛屿的数目
463.岛屿的周长
1034.边界着色
# 695. 岛屿的最大面积
class Solution(object):
# 确定参数和返回值int
def dfs(self, i, j):
# 终止条件
if not (0 <= i < self.m and 0 <= j < self.n and self.grid[i][j] == 1):
return 0
# 搜索遍历过程
ans = 1
self.grid[i][j] = 0
for dx, dy in [[-1, 0], [1, 0], [0, -1], [0, 1]]:
x = i + dx
y = j + dy
ans += self.dfs(x, y)
#self.grid[i][j] = 1
return ans
def maxAreaOfIsland(self, grid):
ans = 0
self.m = len(grid)
self.n = len(grid[0])
self.grid = grid
for i in range(self.m):
for j in range(self.n):
# 计算岛屿面积
ans = max(ans, self.dfs(i, j))
return ans