#刷题交流#
最长递减路径节点数查找
解题方法总结
1. 理解问题:
- 我们需要在一个二维整数网格中找到一条包含最多节点的路径,这条路径上每个节点的值都必须严格递减。
- 路径只能上下左右移动,不能走对角线,也不能走出网格的边界。
2. 数据结构选择:
- 使用二维数组 `memo` 来存储每个节点的最长递减路径长度,避免重复计算。
- 使用方向数组 `directions` 来表示上下左右四个方向的移动。
3. 算法步骤:
- **初始化**:如果网格为空,直接返回0。
- **遍历每个节点**:对于每个节点,调用深度优先搜索(DFS)函数来计算从该节点开始的最长递减路径长度。
- **DFS 函数**:
- 如果当前节点的最长递减路径长度已经计算过(即 `memo[i][j] != 0`),直接返回该值。
- 初始化当前节点的最长递减路径长度为1(即只包含当前节点)。
- 遍历四个方向,检查新位置是否在网格内且值严格小于当前节点。
- 递归计算从新位置开始的最长递减路径长度,并更新当前节点的最长路径长度。
- 将当前节点的最长递减路径长度存入 `memo` 数组。
- **更新全局最长路径长度**:在主函数中,遍历每个节点,调用 DFS 函数并更新全局最长路径长度。
4. 返回结果:最终返回全局最长路径长度。