Leetcode 329, Longest Increasing Path in a Matrix
2017-01-18 11:41
267 查看
Native的DFS,TLE:
加上DP:
refer: http://www.programcreek.com/2014/05/leetcode-longest-increasing-path-in-a-matrix-java/
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/
相关文章推荐
- LeetCode—329. Longest Increasing Path in a Matrix
- [leetcode]329. Longest Increasing Path in a Matrix
- leetcode 329. Longest Increasing Path in a Matrix
- leetcode 329 : Longest Increasing Path in a Matrix : dfs+dp
- LeetCode--329. Longest Increasing Path in a Matrix
- [Leetcode] #329 Longest Increasing Path in a Matrix (DFS)
- LeetCode 329: Longest Increasing Path in a Matrix
- leetcode 329. Longest Increasing Path in a Matrix
- [LeetCode 329] Longest Increasing Path in a Matrix
- LeetCode #329 - Longest Increasing Path in a Matrix - Hard
- LeetCode 329. Longest Increasing Path in a Matrix
- [leetcode-329]Longest Increasing Path in a Matrix(java)
- LeetCode-329.Longest Increasing Path in a Matrix
- leetcode: Memoization:Longest Increasing Path in a Matrix(329)
- 【LEETCODE】329-Longest Increasing Path in a Matrix [Python]
- [leetcode]329. Longest Increasing Path in a Matrix
- leetcode-329. Longest Increasing Path in a Matrix
- [leetcode] 329. Longest Increasing Path in a Matrix
- Leetcode:329. Longest Increasing Path in a Matrix
- leetcode329——Longest Increasing Path in a Matrix