[LeetCode]329. Longest Increasing Path in a Matrix
2017-03-03 19:28
267 查看
https://leetcode.com/problems/longest-increasing-path-in-a-matrix/?tab=Description
找到二维数组里面的最长递增序列的长度
注意用cache保存下来已经得到的状态
public class Solution {
public int longestIncreasingPath(int[][] matrix) {
if (matrix == null || matrix.length == 0) {
return 0;
}
int max = 0;
int[][] cache = new int[matrix.length][matrix[0].length];
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, cache));
}
}
return max;
}
int[][] dirs = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
private int dfs(int[][] matrix, int row, int col, int[][] cache) {
if (cache[row][col] != 0) {
return cache[row][col];
}
int res = 0;
for (int[] dir : dirs) {
int i = row + dir[0];
int j = col + dir[1];
if (i < 0 || i >= matrix.length || j < 0 || j >= matrix[0].length || matrix[i][j] >= matrix[row][col]) {
continue;
}
res = Math.max(res, dfs(matrix, i, j, cache));
}
cache[row][col] = res + 1;
return res + 1;
}
}
找到二维数组里面的最长递增序列的长度
注意用cache保存下来已经得到的状态
public class Solution {
public int longestIncreasingPath(int[][] matrix) {
if (matrix == null || matrix.length == 0) {
return 0;
}
int max = 0;
int[][] cache = new int[matrix.length][matrix[0].length];
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, cache));
}
}
return max;
}
int[][] dirs = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
private int dfs(int[][] matrix, int row, int col, int[][] cache) {
if (cache[row][col] != 0) {
return cache[row][col];
}
int res = 0;
for (int[] dir : dirs) {
int i = row + dir[0];
int j = col + dir[1];
if (i < 0 || i >= matrix.length || j < 0 || j >= matrix[0].length || matrix[i][j] >= matrix[row][col]) {
continue;
}
res = Math.max(res, dfs(matrix, i, j, cache));
}
cache[row][col] = res + 1;
return res + 1;
}
}
相关文章推荐
- 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 解题报告
- 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 在二维数组中寻找最长递增序列
- 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
- 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的做法
- leetcode_[python/C++] 329. Longest Increasing Path in a Matrix(DFS+记忆化搜索)
- [LeetCode] 329. Longest Increasing Path in a Matrix ☆☆☆
- LeetCode329. Longest Increasing Path in a Matrix
- [LeetCode][JavaScript]Longest Increasing Path in a Matrix
- LeetCode Longest Increasing Path in a Matrix
- Leetcode: Longest Increasing Path in a Matrix