旋转正方形矩阵
【题目】 给定一个整型正方形矩阵matrix,请把该矩阵调整成顺时针旋转90度的样子。
【要求】 额外空间复杂度为O(1)。
解答: 还是一圈圈的旋转,首先旋转最外面,然后逐层向里,在旋转的时候唯一需要注意的就是元素之间的位置替换;
图形化:

class Solution {
public void rotate(int[][] matrix) {
int leftTopRow = 0;
int leftTopColumn = 0;
int rightBottomRow = matrix.length - 1;
int rightBottomColumn = matrix[0].length - 1;
while(leftTopRow < rightBottomRow){
rotateEdge(matrix,leftTopRow++,leftTopColumn++,rightBottomRow--,rightBottomColumn--);
}
}
public void rotateEdge(int[][] matrix, int leftTopRow, int leftTopColumn,
int rightBottomRow, int rightBottomColumn){
int times = rightBottomColumn - leftTopColumn;
int temp = 0;
// i 相当于圈数 0—times -1 ,只需要交换times就可以完成交换
//这里圈数指每层交换的次数
//每次交换 4个
for(int i = 0; i < times;i++ ){
temp = matrix[leftTopRow][leftTopColumn + i];
matrix[leftTopRow][leftTopColumn + i] = matrix[rightBottomRow - i][leftTopRow];
matrix[rightBottomRow - i][leftTopRow] = matrix[rightBottomRow][rightBottomColumn - i];
matrix[rightBottomRow][rightBottomColumn - i] = matrix[leftTopRow + i][rightBottomColumn];
matrix[leftTopRow + i][rightBottomColumn] = temp;
}
}
}
leetcode链接:https://leetcode-cn.com/problems/rotate-matrix-lcci/submissions/
网友评论