Leetcode 329. 矩阵中的最长递增路径(DAY 169)---- LeetCode 精选 TOP 面试题

清疚 2022-09-11 05:13 242阅读 0赞

文章目录

    • 原题题目
    • 代码实现(首刷超时 TLE 135/138)
    • 代码实现(首刷自解 回溯法DFS+记忆化)

原题题目


在这里插入图片描述


代码实现(首刷超时 TLE 135/138)


  1. class Solution {
  2. public:
  3. int ret;
  4. void backtracking(vector<vector<int>>& matrix,vector<vector<int>>& visit,int x,int y,int step,int pre)
  5. {
  6. if(x<0 || x>=matrix.size() || y<0 || y>=matrix[0].size() || matrix[x][y] <= pre || visit[x][y]) return;
  7. int num = 1;
  8. visit[x][y] = true;
  9. ret = max(ret,step+1);
  10. for(int i=0;i<4;++i)
  11. {
  12. if(i<=1) backtracking(matrix,visit,x+num,y,step+1,matrix[x][y]);
  13. else backtracking(matrix,visit,x,y+num,step+1,matrix[x][y]);
  14. num *= -1;
  15. }
  16. visit[x][y] = false;
  17. }
  18. int longestIncreasingPath(vector<vector<int>>& matrix) {
  19. vector<vector<int>> visit(matrix.size(),vector<int>(matrix[0].size(),false));
  20. ret = 0;
  21. for(int x=0;x<matrix.size();++x)
  22. for(int y=0;y<matrix[0].size();++y)
  23. backtracking(matrix,visit,x,y,0,-1);
  24. return ret;
  25. }
  26. };

代码实现(首刷自解 回溯法DFS+记忆化)


  1. class Solution {
  2. public:
  3. int ret;
  4. int backtracking(vector<vector<int>>& matrix,vector<vector<bool>>& visit,vector<vector<int>>& dp,int x,int y,int step,int pre)
  5. {
  6. if(x<0 || x>=matrix.size() || y<0 || y>=matrix[0].size() || matrix[x][y] <= pre || visit[x][y]) return 0;
  7. if(dp[x][y] > 1) return dp[x][y];
  8. int num = 1,tmp = 0;
  9. visit[x][y] = true;
  10. for(int i=0;i<4;++i)
  11. {
  12. if(i<=1) tmp = max(backtracking(matrix,visit,dp,x+num,y,step+1,matrix[x][y]),tmp);
  13. else tmp = max(backtracking(matrix,visit,dp,x,y+num,step+1,matrix[x][y]),tmp);
  14. num *= -1;
  15. }
  16. dp[x][y] = max(dp[x][y],tmp+1);
  17. ret = max(ret,dp[x][y]);
  18. visit[x][y] = false;
  19. return tmp+1;
  20. }
  21. int longestIncreasingPath(vector<vector<int>>& matrix) {
  22. vector<vector<bool>> visit(matrix.size(),vector<bool>(matrix[0].size(),false));
  23. vector<vector<int>> dp(matrix.size(),vector<int>(matrix[0].size(),1));
  24. ret = 0;
  25. for(int x=0;x<matrix.size();++x)
  26. for(int y=0;y<matrix[0].size();++y)
  27. if(dp[x][y] == 1) backtracking(matrix,visit,dp,x,y,0,-1);
  28. return ret;
  29. }
  30. };

发表评论

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

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

相关阅读