矩阵最长递增路径-(递归回溯+动态规划)

牛客网: BM61

求矩阵的最长递增路径

解题思路:

  1. 遍历二维矩阵每个位置,max求出所有位置分别为终点时的最长路径

  2. 求某个位置为终点的最长路径时,使用动态规划dp对已经计算出的位置进行记录

  3. 处理某个位置的最长路径时,如果dp[i][j]位置已有值,则直接返回即可,否则对此位置赋值1,再对上下左右4个方向进行递归求解,每次递归后返回的最长路径需+1才是当前位置的最长路径,使用max选择最大值赋予dp[i][j],4个方向均遍历完后返回dp[i][j]给主程序。

代码:

Go 复制代码
// go

package main
// import "fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 递增路径的最大长度
 * @param matrix int整型二维数组 描述矩阵的每个数
 * @return int整型
*/
func max(x, y int) int {
    if x > y {return x} else {return y}
}
var dirs = [][]int{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}

func process(matrix, dp [][]int, i, j, m, n int) int {
    if dp[i][j] > 0 {
        return dp[i][j]
    }
    dp[i][j] = 1
    for k := 0; k < 4; k++ {
        nexti := i + dirs[k][0]
        nextj := j + dirs[k][1]
        if nexti >= 0 && nexti < m && nextj >= 0 && nextj < n && matrix[nexti][nextj] < matrix[i][j] {
            dp[i][j] = max(dp[i][j], process(matrix, dp, nexti, nextj, m, n) + 1)
        }
    }
    return dp[i][j]
}

func solve( matrix [][]int ) int {
    // write code here
    if len(matrix) == 0 || len(matrix[0]) == 0 {
        return 0
    }
    m := len(matrix)
    n := len(matrix[0])
    dp := make([][]int, m)
    for i := 0; i < m; i++ {
        dp[i] = make([]int, n)
    }
    res := 0
    for i := 0; i < m; i++ {
        for j := 0; j < n; j++ {
            res = max(res, process(matrix, dp, i, j, m, n))
        }
    }
    return res
}
相关推荐
byzh_rc13 小时前
[算法设计与分析-从入门到入土] 动态规划
算法·动态规划
IT猿手15 小时前
三维动态避障路径规划:基于部落竞争与成员合作算法(CTCM)融合动态窗口法DWA的无人机三维动态避障方法研究,MATLAB代码
算法·matlab·动态规划·无人机·路径规划·动态路径规划
nju_spy21 小时前
12月力扣每日一题(划分dp + 单调栈 + 堆 + 会议安排)
算法·leetcode·二分查找·动态规划·滑动窗口·单调栈·最大堆
2401_841495641 天前
【LeetCode刷题】零钱兑换
数据结构·python·算法·leetcode·动态规划·数组·时间复杂度
.魚肉1 天前
旅行商问题 (TSP)的蛮力算法与动态规划算法(Held-Karp)
动态规划·算法设计与分析·tsp·旅行商问题·蛮力法·held-karp算法·复杂度求解
2401_841495642 天前
【LeetCode刷题】打家劫舍
数据结构·python·算法·leetcode·动态规划·数组·传统dp数组
ohnoooo92 天前
251225 算法2 期末练习
算法·动态规划·图论
LYFlied3 天前
【每日算法】LeetCode 152. 乘积最大子数组(动态规划)
前端·算法·leetcode·动态规划
LYFlied3 天前
【每日算法】LeetCode 62. 不同路径(多维动态规划)
前端·数据结构·算法·leetcode·动态规划
2401_841495643 天前
【LeetCode刷题】爬楼梯
数据结构·python·算法·leetcode·动态规划·滑动窗口·斐波那契数列