下面的代码是我为一个问题编写的答案,该问题要求将nxn 2D矩阵旋转90度(顺时针),而无需创建新的2D数组。例如
Given input matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
rotate the input matrix:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
我试图逐行执行此操作,但是必须处理的问题是如果该对索引已更改,该怎么办。因此,如果我尝试将索引对[1,2]分配给[0,1],但是[0,1]之前已经更改过。我想出的解决方案是使用HashMap,将索引对放入数组中作为键,并将原始数字作为值。
这是我的代码
public void rotate(int[][] matrix) {
int n = matrix.length;
HashMap<int[], Integer> map = new HashMap<>();
for(int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
if(map.containsKey(new int[]{n-j,i})){
matrix[i][j] = map.get(new int[]{n-j, i});
}
else{
int temp = matrix[i][j];
matrix[i][j] = matrix[n-j][i];
map.put(new int[]{n-j,i}, temp);
}
}
}
}
但是,结果表明
if(map.containsKey(new int[]{n-j,i})){
matrix[i][j] = map.get(new int[]{n-j, i});
}
这行代码不是在搜索我之前放入的数组。我知道我每次都在创建一个新数组,但是它如何使containsKey不知道该数组是否包含相同的数字(相同的数组)?谁能帮助我了解为什么在此处使用数组标记索引对在HashMap中不起作用?
相关分类