下面的代码是我为一个问题编写的答案,该问题要求将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中不起作用?
添加回答
举报
0/150
提交
取消