在lc上刷题 遇到了如下问题
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--;
}
}
}
运行结果跟原先二维数组没有变化
但是如果把交换步骤写在循环里就可以通过
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--;
}
}
}
想了一阵子也没想出来为啥,有明白的人能解一下惑吗 感激不尽 谢谢