Letter_1 2022-07-19 11:38 采纳率: 57.1%
浏览 18

刷力扣遇到的旋转二维数组问题

在lc上刷题 遇到了如下问题

img

class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        for (int i = 0; i < n-1; i++) {
            for (int j = i+1; j < n; j++) {
                swap(matrix[i][j], matrix[j][i]);
            }
        }
        for (int[] row : matrix) {
            reverseArray(row);
        }
    }

    public void swap(int a, int b) {
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
    }

    public void reverseArray(int[] nums) {
        int left = 0, right = nums.length - 1;
        while (left < right) {
            swap(nums[left], nums[right]);
            left++;
            right--;
        }
    }
}

运行结果跟原先二维数组没有变化

img

但是如果把交换步骤写在循环里就可以通过
class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i]=temp;
            }
        }
        for (int[] row : matrix) {
            swap(row);
        }
    }

    public void swap(int[] nums) {
        if(nums.length==0) return;
        int left=0,right=nums.length-1;
        while (left < right) {
            int temp = nums[left];
            nums[left] = nums[right];
            nums[right]=temp;
            left++;
            right--;
        }
    }
}

img

想了一阵子也没想出来为啥,有明白的人能解一下惑吗 感激不尽 谢谢
  • 写回答

1条回答 默认 最新

  • bekote 2022-07-20 17:43
    关注

    因为swap函数里a和b是形参,交换了a和b的值不会影响到matrix

    评论

报告相同问题?

问题事件

  • 创建了问题 7月19日

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面