class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 递增路径的最大长度
* @param matrix int整型vector<vector<>> 描述矩阵的每个数
* @return int整型
*/
int solve(vector<vector<int> >& matrix) {
int len = matrix.size();
if (len == 0 || matrix[0].size() == 0) {
return 0;
}
vector<vector<int>>dp(len, vector<int>(matrix[0].size(), 0));
int ret = 0;
for (int i = 0; i < len; i++) {
for (int j = 0; j < matrix[0].size(); j++) {
int temp = dfs(matrix, dp, i, j, -1);
ret = max(ret, temp);
}
}
return ret;
}
int dfs(vector<vector<int> >& matrix, vector<vector<int> >& dp, int x, int y, int pre) {
// 对x,y的范围定界
if (x < 0 || x >= matrix.size() || y < 0 || y >= matrix[0].size()) {
return 0;
}
// 如果下一个值小于当前值,直接return
if(matrix[x][y] <= pre) {
return 0;
}
// 保证不再重复遍历
if(dp[x][y] != 0) {
return dp[x][y];
}
int tempMax = 0;
int left = dfs(matrix, dp, x - 1, y, matrix[x][y]);
tempMax = left;
int right = dfs(matrix, dp, x + 1, y, matrix[x][y]);
tempMax = max(right, tempMax);
int up = dfs(matrix, dp, x, y + 1, matrix[x][y]);
tempMax = max(up, tempMax);
int down = dfs(matrix, dp, x, y - 1, matrix[x][y]);
tempMax = max(down, tempMax);
dp[x][y] = tempMax + 1; // + 1是因为也包括当前的
return dp[x][y];
}
};