一、题目概述:
【1】题目原型:
【2】原题连结:
48. 旋转图像 - 力扣(LeetCode) (leetcode-cn.com)
二、解题思路:
旋转问题我们不妨先只看部分,我们明显可以观察到:每次旋转时只和四个数有关,我们不妨先通过双重for循环以每边中点为界将其分为4份。
for(int row = 0,row < n/2,row ++){
for(int line = 0,line < n/2,line ++){
}
}
然后开始旋转:旋转相当于就是数的交换,因为旋转了四个数,相应的我们只需要 交换三次:
我们建立一个swap函数进行交换:
private void swap(int [][] matrix,int x1, int y1, int x2, int y2){
int temp = matrix[x1][y1];
matrix[x1][y1] = matrix[x2][y2];
matrix[x2][y2] = temp;
}
三、题解代码:
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
if(n <= 1)
return ;
for(int row = 0;row < n/2;row ++){
int line = row;
int endLine = n - row - 1;
for(int i = line;i < endLine;i++){
int x = row;
int y = i;
swap(matrix, x, y, y,endLine);
swap(matrix, x, y, endLine, endLine - (y - line));
swap(matrix, x, y, endLine - (y - line), line);
}
}
}
private void swap(int [][] matrix,int x1, int y1, int x2, int y2){
int temp = matrix[x1][y1];
matrix[x1][y1] = matrix[x2][y2];
matrix[x2][y2] = temp;
}
}
PS.因为每次旋转都会改变x、y的值所以不需要变动前三个参数。