您的位置:首页 > 其它

Leetcode 329, Longest Increasing Path in a Matrix

2017-01-18 11:41 267 查看
Native的DFS,TLE:

public int longestIncreasingPath(int[][] matrix) {
if(matrix==null||matrix.length==0||matrix[0].length==0)
return 0;

int[] max = new int[1];
for(int i=0; i<matrix.length; i++)    {
for(int j=0; j<matrix[0].length; j++){
dfs(matrix, i, j, max, 1);
}
}

return max[0];
}

public void dfs(int[][] matrix, int i, int j, int[] max, int len){

max[0]=Math.max(max[0], len);

int m=matrix.length;
int n=matrix[0].length;

if(i + 1>=0 && i + 1<m && j>=0 && j<n && matrix[i + 1][j]>matrix[i][j]){
dfs(matrix, i + 1, j, max, len+1);
}
if(i - 1>=0 && i - 1<m && j>=0 && j<n && matrix[i - 1][j]>matrix[i][j]){
dfs(matrix, i - 1, j, max, len+1);
}
if(i>=0 && i<m && j + 1>=0 && j + 1<n && matrix[i][j + 1]>matrix[i][j]){
dfs(matrix, i, j + 1, max, len+1);
}
if(i>=0 && i<m && j - 1>=0 && j - 1<n && matrix[i][j - 1]>matrix[i][j]){
dfs(matrix, i, j - 1, max, len+1);
}

}


加上DP:

public int longestIncreasingPath(int[][] matrix) {
if(matrix==null||matrix.length==0||matrix[0].length==0)
return 0;

int[][] mem = new int[matrix.length][matrix[0].length];
int max=0;

for(int i=0; i<matrix.length; i++){
for(int j=0; j<matrix[0].length; j++){
max = Math.max(max, dfs(matrix, i, j, mem));
}
}

return max;
}

public int dfs(int[][] matrix, int i, int j,  int[][] mem){
if(mem[i][j]!=0)
return mem[i][j];

if(i+1>=0&&j>=0&&i+1<matrix.length&&j<matrix[0].length&&matrix[i+1][j]>matrix[i][j]){
mem[i][j]=Math.max(mem[i][j], dfs(matrix, i+1, j, mem));
}
if(i-1>=0&&j>=0&&i-1<matrix.length&&j<matrix[0].length&&matrix[i-1][j]>matrix[i][j]){
mem[i][j]=Math.max(mem[i][j], dfs(matrix, i-1, j, mem));
}
if(i>=0&&j+1>=0&&i<matrix.length&&j+1<matrix[0].length&&matrix[i][j+1]>matrix[i][j]){
mem[i][j]=Math.max(mem[i][j], dfs(matrix, i, j+1, mem));
}
if(i>=0&&j-1>=0&&i<matrix.length&&j-1<matrix[0].length&&matrix[i][j-1]>matrix[i][j]){
mem[i][j]=Math.max(mem[i][j], dfs(matrix, i, j-1, mem));
}

return ++mem[i][j];
}


refer: http://www.programcreek.com/2014/05/leetcode-longest-increasing-path-in-a-matrix-java/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: