cc书上的方法就是每一层分成四个 旋转 index非常难想
public class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
for ( int i = 0; i < n / 2; i ++ ){
int [] temp = new int [n-2*i-1];
for ( int j = 0; j < n-2*i -1; j ++ ){
temp[ j ] = matrix[i][j+i];
matrix[i][j+i] = matrix[n-i-j-1][i];
matrix[n-i-j-1][i] = matrix[n-i-1][n-i-j-1];
matrix[n-i-1][n-i-j-1] = matrix[i+j][n-i-1];
matrix[i+j][n-i-1] = temp[j];
}
}
return;
}
}
第二种方法很巧妙 就是先上下reverse 然后对角线swap
public class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
for(int i = 0; i < n / 2; i++){
int [] temp = matrix[i];
matrix[i] = matrix[matrix.length - i - 1];
matrix[matrix.length - i - 1] = temp;
}
for ( int i = 0; i < n; i ++ ){
for ( int j = 0; j < i; j ++ ){
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
return;
}
}
本文介绍两种实现二维数组旋转的方法:一种是逐层进行元素旋转,思路复杂但直观;另一种则是先进行上下翻转再对角交换,实现巧妙且简洁。
240

被折叠的 条评论
为什么被折叠?



