html网站地图在线生成,外贸整合推广,金融 网站 模板,电商网站设计流程给定一个整数矩阵#xff0c;找出最长递增路径的长度。
对于每个单元格#xff0c;你可以往上#xff0c;下#xff0c;左#xff0c;右四个方向移动。 你不能在对角线方向上移动或移动到边界外#xff08;即不允许环绕#xff09;。
示例 1:
输入: nums [ [9,9,…给定一个整数矩阵找出最长递增路径的长度。
对于每个单元格你可以往上下左右四个方向移动。 你不能在对角线方向上移动或移动到边界外即不允许环绕。
示例 1:
输入: nums [ [9,9,4], [6,6,8], [2,1,1] ] 输出: 4 解释: 最长递增路径为 [1, 2, 6, 9]。 示例 2:
输入: nums [ [3,4,5], [3,2,6], [2,2,1] ] 输出: 4 解释: 最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方向上移动。
思路可以看作有向图在点(i,j)相邻的四个点中从低的值到高的值有一条边
通过深度优先遍历可以解决但是时间复杂度极高因此想办法将找过的记录存下来记忆化搜索。
dp[i][j]!0时,表示被搜索过
class Solution {private int[][] dir {{0,1},{0,-1},{1,0},{-1,0}};public int dfs(int dp[][],int matrix[][],int i,int j){if(dp[i][j]!0){return dp[i][j];}dp[i][j];for(int[] ints : dir){int row iints[0];int column jints[1];if(rowmatrix.length||row0||column0||columnmatrix[0].length){continue;}if(matrix[i][j]matrix[row][column]){dp[i][j] Math.max(dp[i][j],dfs(dp,matrix,row,column)1);}}return dp[i][j];}public int longestIncreasingPath(int[][] matrix) {if(matrix.length0||matrix[0].length0){return 0;}int dp[][] new int[matrix.length][matrix[0].length];int max -21474836471;for(int i0;imatrix.length;i){for(int j0;jmatrix[0].length;j){max Math.max(max,dfs(dp,matrix,i,j));}}return max;}
}