1、因为不能借助额外空间,所以考虑找规律找对换元素,通过不断交换
2、通过提示得出,通过对角线交换和中心线为中心交换左右即可达到目的
3、注意对角线交换算法
代码:
package com.LeetCode1.Array;
public class leet0107 {
/**
* 基本思想:先以对角线为中心,变换上下,然后以中心线为中心对换左右
* @param args
*/
public static void main(String[] args) {
// int[][] arr = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
rotate(arr);
printArr(arr);
}
public static void rotate(int[][] matrix) {
int n = matrix.length;
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)//注意点:比如(2,1),在(1,2)那已经换过了,所以在2的时候直接从2往后,略过前面换过的
{
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n/2;j++)
{
int temp = matrix[i][j];
matrix[i][j] = matrix[i][n-1-j];
matrix[i][n-1-j] = temp;
}
}
}
public static void printArr(int[][] arr)
{
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr[i].length;j++)
{
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}