题解 | #矩阵最长递增路径#
矩阵最长递增路径
https://www.nowcoder.com/practice/7a71a88cdf294ce6bdf54c899be967a2
class Solution { public: bool isBound(int x, int y, int n, int m) { if (x < 0 || x > n - 1 || y < 0 || y > m - 1) { return false; } return true; } int dx[4] = { 0, 0, 1, -1 }; int dy[4] = { 1, -1, 0, 0 }; int recursion(int x, int y, vector<vector<int> >& matrix, vector<vector<int>>& mark) { if (mark[x][y] != 0) return mark[x][y]; int cmax = 0; for (int i = 0; i < 4; i++) { int tx = x + dx[i]; int ty = y + dy[i]; if (isBound(tx, ty, matrix.size(), matrix[0].size())) { if (matrix[x][y] < matrix[tx][ty]) { cmax = max(cmax, recursion(tx, ty, matrix, mark)); recursion(tx, ty, matrix, mark); } } } mark[x][y] = cmax + 1; return cmax + 1; } int solve(vector<vector<int> >& matrix) { // write code here int max = 0; vector<vector<int>> mark(matrix.size(), vector<int> (matrix[0].size(), 0)); for (int i = 0; i < matrix.size(); i++) { for (int j = 0; j < matrix[i].size(); j++) { if (recursion(i, j, matrix, mark) > max) { max = recursion(i, j, matrix, mark); } } } return max; } };