leetcode 矩阵中的最长递增路径 困难

记忆化:如果一个点搜索过了,那么这个从这个点出发能够满足题目的最长路径长度便是已知。
class Solution { public: int longestIncreasingPath(const vector<vector<int>>& matrix) { if(matrix.empty() || matrix[0].empty()) return 0; visit.resize(matrix.size(), vector<int>(matrix[0].size(), 0)); int ans = 0; for(int i = 0; i < matrix.size(); ++ i) { for(int j = 0; j < matrix[i].size(); ++ j) { if(visit[i][j] == 0) solve(matrix, i, j); ans = max(ans, visit[i][j]); } } return ans; } private: vector<vector<int>> visit; // visit[i][j] 表示经过 i, j 的最大递增长度 int to[4][2] = {0, 1, 0, -1, 1, 0, -1, 0}; void solve(const vector<vector<int>>& matrix, int i, int j) { visit[i][j] = 1; for(int k = 0; k < 4; ++ k) { int ii = i + to[k][0]; int jj = j + to[k][1]; if(ii < 0 || ii >= matrix.size() || jj < 0 || jj >= matrix[0].size()) continue; if(matrix[ii][jj] <= matrix[i][j]) continue; if(visit[ii][jj] == 0) solve(matrix, ii, jj); visit[i][j] = max(visit[i][j], visit[ii][jj] + 1); } } };
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号