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


    /**^**/一开始写的朴素递归。。把max引用传进函数去,最后只返回一个max,但时间超时,虽然逻辑没问题。。看了题解emmm,明白了是备忘录递归法,但基于我这种原始代码改的还麻烦,之前返回void,备忘录的话得返回每个节点得值,好吧,直接贴官方代码。总是一看就懂。。。气死

     1 class Solution {
     2 public:
     3     static constexpr int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
     4     int rows, columns;
     5 
     6     int longestIncreasingPath(vector< vector<int> > &matrix) {
     7         if (matrix.size() == 0 || matrix[0].size() == 0) {
     8             return 0;
     9         }
    10         rows = matrix.size();
    11         columns = matrix[0].size();
    12         auto memo = vector< vector<int> > (rows, vector <int> (columns));
    13         int ans = 0;
    14         for (int i = 0; i < rows; ++i) {
    15             for (int j = 0; j < columns; ++j) {
    16                 ans = max(ans, dfs(matrix, i, j, memo));
    17             }
    18         }
    19         return ans;
    20     }
    21 
    22     int dfs(vector< vector<int> > &matrix, int row, int column, vector< vector<int> > &memo) {//返回以每个坐标点开始的最长路径
    23         if (memo[row][column] != 0) {  //备忘录
    24             return memo[row][column];
    25         }
    26         ++memo[row][column];
    27         for (int i = 0; i < 4; ++i) {
    28             int newRow = row + dirs[i][0], newColumn = column + dirs[i][1];
    29             if (newRow >= 0 && newRow < rows && newColumn >= 0 && newColumn < columns && matrix[newRow][newColumn] > matrix[row][column]) {
    30                 memo[row][column] = max(memo[row][column], dfs(matrix, newRow, newColumn, memo) + 1);  //四个方向的max
    31             }
    32         }
    33         return memo[row][column];
    34     }
    35 };
    每天进步一点点~
  • 相关阅读:
    2-1
    project 1
    application.properties
    springbootmybaits_day2
    springbootMybaits_day1
    linux文件夹赋予权限
    属性拼接问题
    三种数据库的配置文件db.properties
    mysql对应java中常用的字段
    Spring里面的注解
  • 原文地址:https://www.cnblogs.com/libin123/p/14627568.html
Copyright © 2020-2023  润新知