将给定的矩阵matrix顺时针旋转90°
* 思路:
* 将matrix分为一圈一圈的小圈
* 顺时针旋转其实就是每圈中各个元素依次占位
package com.javakk.ex;
/**
* @Time 2018年8月30日 下午3:02:20
* @Title { 旋转矩阵 }
* @Desc { 将给定的矩阵matrix顺时针旋转90° }
* @Email 92920@sohu.com
* @Author JavaKK
*/
public class Ex11 {
public static void main(String[] args) {
int[][] matrix = {
{ 1, 2, 3, 8 },
{ 2, 3, 2, 5 },
{ 3, 4, 1, 6 },
{ 4, 5, 0, 7 }
};
rotate(matrix);
for (int[] is : matrix) {
for (int i : is) {
System.out.print(i + " ");
}
System.out.println();
}
}
/**
* 思路:
* 将matrix分为一圈一圈的小圈
* 顺时针旋转其实就是每圈中各个元素依次占位
* @param matrix
*/
private static void rotate(int[][] matrix) {
int tR = 0;
int tC = 0;
int dR = matrix.length - 1;
int dC = matrix[0].length - 1;
while (tR < dR) {
rotateEdge(matrix, tR++, tC++, dR--, dC--);
}
}
/**
*
* @param matrix
* @param tR : 左上row坐标
* @param tC : 左上col坐标
* @param dR : 右下row坐标
* @param dC : 右下col坐标
*/
private static void rotateEdge(int[][] matrix, int tR, int tC, int dR, int dC) {
// 总共需要调换的次数
int total = dC - tC;
int temp = 0;
for (int i = 0; i < total; i++) {
temp = matrix[tR][tC + i];
matrix[tR][tC + i] = matrix[dR - i][tC];
matrix[dR - i][tC] = matrix[dR][dC - i];
matrix[dR][dC - i] = matrix[tR + i][dC];
matrix[tR + i][dC] = temp;
}
}
}