zoukankan      html  css  js  c++  java
  • 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 };
    每天进步一点点~
  • 相关阅读:
    PCB Genesis加邮票孔(邮票孔增加方向判断--左右上下)实现算法
    PCB SLOT槽孔数量计算方法,同CAM350孔数一致 实现方法
    从上到下打印二叉树II
    数据结构与算法(2)---顺序表
    栈的压入弹出序列
    包含min函数的栈
    顺时针打印矩阵
    数据结构与算法(1)--绪论
    反转链表
    数值的整数次方(快速幂)
  • 原文地址:https://www.cnblogs.com/libin123/p/14627568.html
Copyright © 2011-2022 走看看