import java.util.HashSet;
import java.util.ArrayList;
class Solution {
public int longestIncreasingPath(int[][] matrix) {
List<ArrayList<Integer>>[][] dp = new List[matrix.length][matrix[0].length];
for (int i = matrix.length - 1; i >= 0; i--) {
for (int j = matrix[0].length - 1; j >= 0; j--) {
dp[i][j] = new ArrayList<>();
if (j - 1 >= 0 && matrix[i][j-1] < matrix[i][j]) {
int[] pair = new int[2];
pair[0] = i;
pair[1] = j - 1;
dp[i][j].add(pair);
}
if (j + 1 < matrix[0].length && matrix[i][j+1] < matrix[i][j]) {
int[] pair = new int[2];
pair[0] = i;
pair[1] = j + 1;
dp[i][j].add(pair);
}
if (i - 1 >= 0 && matrix[i-1][j] < matrix[i][j]) {
int[] pair = new int[2];
pair[0] = i - 1;
pair[1] = j;
dp[i][j].add(pair);
}
if (i + 1 < matrix.length && matrix[i+1][j] < matrix[i][j]) {
int[] pair = new int[2];
pair[0] = i + 1;
pair[1] = j;
dp[i][j].add(pair);
}
}
}
int[][] longest = new int[matrix.length][matrix[0].length];
HashSet<List<Integer>> visited = new HashSet<>();
for (int i = matrix.length - 1; i >= 0; i--) {
for (int j = matrix[0].length - 1; j >= 0; j--) {
longest[i][j] = 0;
ArrayList<Integer> element = dp[i][j];
dfs(visited, element, i, j, longest, dp);
}
}
int length = 0;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
if (longest[i][j] > length) {
length = longest[i][j];
}
}
}
return length;
}
public void dfs(HashSet<List<Integer>> visited, ArrayList<Integer> neighbors, int x, int y, int[][] longest, List<ArrayList<Integer>>[][] dp) {
for (int i = 0; i < neighbors.size(); i++) {
neighbor = neighbors[i];
n_x = neighbor[0];
n_y = neighbor[1];
neighbor_list = dp[n_x][n_y];
if (!visited.contains(neighbors[i])) {
dfs(visited, neighbor_list, n_x, n_y, longest, dp);
}
if (longest[n_x][n_y] > longest[x][y]) {
longest[x][y] = longest[n_x][n_y] + 1;
}
}
}
}
上面的代码是我写的。我收到 dp[i][j].add(pair) 行的错误
错误:不兼容的类型:int[] 无法转换为 ArrayList dp[i][j].add(pair);.
我不确定为什么会收到该错误。我想实例化一个 2D 列表,其中每个条目存储一个整数列表的 ArrayList,其中每个列表的长度为 2。我不确定我做错了什么。我相信我最初正确地实例化了 ArrayLists (dp) 列表;然后,对于 dp 中的每个条目,我实例化了一个 ArrayList,并将列表附加到其中。我到底做错了什么?
构造函数
List<ArrayList<Integer>>[][] dp = new List[matrix.length][matrix[0].length];
不正确。这将创建一个由整数 ArrayList 组成的列表的二维数组。我相信您正在努力实现ArrayList[][] dp = new ArrayList[matrix.length][matrix[0].length];
?这将消除错误。如果我正确理解你的问题,这应该可以解决它。