您的位置:首页 > 其它

329. Longest Increasing Path in a Matrix

2017-11-22 21:14 274 查看




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

这道题是用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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: