nn矩阵的旋转(原地操作的话只能是nn矩阵)
- 新建一个相同大小的矩阵,根据下一个位置的col对应原位置的row,row对应n- col-1;进行一列一列的赋值。
- 原地操作,根据上述转化的条件,边界条件注意,偶数的化旋转1/4,奇数的话多选一个点。
class Solution {
public void rotate(int[][] matrix) {
int len1 = matrix.length;
int len2 = matrix[0].length;
for(int i = 0 ; i < len1/2; ++i){
for(int j = 0 ; j < (len2+1)/2; ++j){
int temp = matrix[i][j];
matrix[i][j] = matrix[len2-j-1][i];
matrix[len2-j-1][i] = matrix[len1-i-1][len2-j-1];
matrix[len1-i-1][len2-j-1] = matrix[j][len1-i-1];
matrix[j][len1-i-1] = temp;
}
}
}
}
- n*n矩阵的话可以采用角对线对称与水平翻转来得到,注意出界条件
class Solution {
public void rotate(int[][] matrix) {
for(int i = 0 ; i < matrix.length/2; ++i){
for(int j = 0 ;j < matrix[0].length; ++j){
int temp = matrix[i][j];
matrix[i][j] = matrix[matrix.length - i - 1][j];
matrix[matrix.length - i - 1][j] = temp;
}
}
for(int i = 0 ; i < matrix.length; ++i){
for(int j = i ;j < matrix[0].length; ++j){
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
}