• 329. 矩阵中的最长递增路径


    给定一个整数矩阵,找出最长递增路径的长度。

    对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。

    示例 1:输入: nums = 

    [[9,9,4],
    [6,6,8],
    [2,1,1]]
    输出: 4
    解释: 最长递增路径为 [1, 2, 6, 9]。


    示例 2:输入:nums = 

    [[3,4,5],
    [3,2,6],
    [2,2,1]]
    输出: 4 解释: 最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方向上移动。

    解题思路:memo[i][j] 表示从[i,j]开始的最长递增路径的长度.

    dfs 返回值 也是该点开始的最长递增路径的长度,显然,当前点的最长路径 = 能走到的下个点的最长路径 + 1
    在dfs函数中,tmp变量初始化为1,表示从该点开始,未向外扩展时,长度为1.

    int dict[4][2] = {
        {-1, 0},
        {0, -1},
        {1, 0},
        {0, 1}
    };
    
    int dfs(int **matrix, int **memo, int row, int col, int i, int j)
    {
        if (memo[i][j])
            return memo[i][j];
    
        int tmp = 1;
        for (int k = 0; k < 4; k++) {
            int x = i + dict[k][0];
            int y = j + dict[k][1];
            if (x >= 0 && x < row && y >= 0 && y < col && matrix[x][y] > matrix[i][j]) {
                tmp = fmax(tmp, dfs(matrix, memo, row, col, x, y) + 1);
            }
        }
        memo[i][j] = tmp;
        return memo[i][j];
    }
    
    int longestIncreasingPath(int** matrix, int matrixSize, int* matrixColSize){
        if (matrix == NULL) {
            return 0;
        }
        
        int **memo = (int **)malloc(matrixSize * sizeof(int *));
        for (int i = 0; i < matrixSize; i++) {
            memo[i] = (int *)calloc(matrixColSize[0], sizeof(int));
        }
        
        int res = 0;
        for (int i = 0; i < matrixSize; i++) {
            for (int j = 0; j < matrixColSize[0]; j++) {
                res = fmax(res, dfs(matrix, memo, matrixSize, matrixColSize[0], i, j));
            }
        }
        
        for (int i = 0; i < matrixSize; i++) {
            free(memo[i]);
        }
        free(memo);
        return res;
    }
  • 相关阅读:
    C#:如何设置MDI窗体
    asp.net在类库中使用EF 6.0时的相关配置
    asp.net中使用jquery ajax保存富文本的问题
    Asp.net Api中使用OAuth2.0实现“客户端验证”
    NLog在asp.net中的使用
    元素的隐藏特性
    jQuery 使用笔记
    获取标签的所有选择器存放在一个数组
    自己绘制的flex布局思维导图
    js打印三角形
  • 原文地址:https://www.cnblogs.com/still-smile/p/13382870.html
Copyright © 2020-2023  润新知