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

- 日理万妓 2023-03-01 12:58 63阅读 0赞

给定一个整数矩阵,找出最长递增路径的长度。

对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。
在这里插入图片描述
leetcode

记忆化dfs:

  1. class Solution {
  2. public:
  3. int dir[5] = {
  4. 1, 0, -1, 0, 1};
  5. int row, col;
  6. int dfs(vector<vector<int>>& road, vector<vector<int>>& matrix, int i, int j){
  7. if(road[i][j]) return road[i][j];
  8. road[i][j]++; //没路走了
  9. for(int d = 0; d < 4; d++){
  10. int newi = i + dir[d];
  11. int newj = j + dir[d+1];
  12. if(newi >= 0 && newi < row && newj >= 0 && newj < col && matrix[i][j] < matrix[newi][newj]) road[i][j] = max(road[i][j], dfs(road, matrix, newi, newj) + 1);//有路则更新
  13. }
  14. return road[i][j];
  15. }
  16. int longestIncreasingPath(vector<vector<int>>& matrix) {
  17. int longroad = 0;
  18. row = matrix.size();
  19. if(row == 0) return 0;
  20. col = matrix[0].size();
  21. vector<vector<int> > road(row, vector<int>(col, 0));
  22. for(int i = 0; i < row; i++)
  23. for(int j = 0; j < col; j++)
  24. longroad = max(longroad, dfs(road, matrix, i, j));
  25. return longroad;
  26. }
  27. };

发表评论

表情:
评论列表 (有 0 条评论,63人围观)

还没有评论,来说两句吧...

相关阅读