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;
}
};
相关文章推荐
- LeetCode-329.Longest Increasing Path in a Matrix
- 329. Longest Increasing Path in a Matrix
- 329. Longest Increasing Path in a Matrix
- leecode 解题总结:329. Longest Increasing Path in a Matrix
- 329. Longest Increasing Path in a Matrix
- 329. Longest Increasing Path in a Matrix
- leetcode329——Longest Increasing Path in a Matrix
- LeetCode—329. Longest Increasing Path in a Matrix
- [Leetcode] #329 Longest Increasing Path in a Matrix (DFS)
- leetcode-329. Longest Increasing Path in a Matrix
- leetcode 329. Longest Increasing Path in a Matrix
- LeetCode 329. Longest Increasing Path in a Matrix
- Middle-题目55:329. Longest Increasing Path in a Matrix
- 329. Longest Increasing Path in a Matrix LeetCode
- 329. Longest Increasing Path in a Matrix
- 329. Longest Increasing Path in a Matrix(DFS & DP)
- 【LEETCODE】329-Longest Increasing Path in a Matrix [Python]
- 329. Longest Increasing Path in a Matrix
- Leetcode329: Longest Increasing Path in a Matrix
- 329. Longest Increasing Path in a Matrix