329. Longest Increasing Path in a Matrix

来源:互联网 发布:pdf.js 打开 word文档 编辑:程序博客网 时间:2024/05/22 13:57

这道题是说,给定一个矩阵,求里面最长的递增路径。

这道题是用dfs+动态规划的方法。

首先应该能想到dfs,枚举矩阵所有的位置(i,j),寻找从(i,j)开始的递增路径。为了免去过程中某个位置开始的递增路径的重复计算,需要一个dp,记录已经计算过最长递增路径的结果,如果已经计算过了直接返回dp[i][j]即可。

class Solution {public:    vector<vector<int>> pos = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};    int longestIncreasingPath(vector<vector<int>>& matrix) {        if(matrix.empty() || matrix[0].empty()) return 0;        int res = 1;        vector<vector<int>> dp(matrix.size(), vector<int>(matrix[0].size(), 0));        for(int i = 0; i < matrix.size(); ++i){            for(int j = 0; j < matrix[0].size(); ++j){                res = max(res, helper(matrix, dp, i, j));            }        }        return res;    }    int helper(vector<vector<int>>& matrix, vector<vector<int>>& dp, int i, int j){        if(dp[i][j] > 0)    return dp[i][j];        int res = 1;        for(auto a : pos){            int x = i + a[0];            int y = j + a[1];            if(x >= 0 && x < matrix.size() && y >= 0 && y < matrix[0].size() && matrix[x][y] > matrix[i][j]){                int len = helper(matrix, dp, x, y) + 1;                res = max(res, len);            }        }        dp[i][j] = res;        return res;    }};


原创粉丝点击