题目描述
给定一个n*n的矩阵matrix,请把这个矩阵顺时针转动90度。
输入描述:
输入包含多行,第一行一个整数n,代表矩阵的行数和列数,接下来n行,每行n个整数,代表矩阵matrix。
输出描述:
输出旋转后的矩阵(包含n行,每行n个数)。
示例1
输入
4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
输出
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4
解法一:夹逼
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int len = Integer.parseInt(br.readLine());
int[][] arr = new int[len][len];
for(int i=0;i<len;i++){
String[] tmp = br.readLine().trim().split(" ");
for(int j=0;j<len;j++){
arr[i][j] = Integer.parseInt(tmp[j]);
}
}
arr = reverse(arr);
for(int i=0;i<len;i++){
StringBuilder sb = new StringBuilder();
for(int j=0;j<len;j++){
sb.append(arr[i][j]+" ");
}
System.out.println(sb.toString().trim());
}
}
public static int[][] reverse(int[][] arr){
if(arr==null||arr.length==0||arr[0].length==0) return arr;
int row = arr.length;
int col = arr[0].length;
int li = 0,lj = 0;
int ri = row-1,rj = col-1;
while(li<ri&&lj<rj){
reverse(arr,li++,lj++,ri--,rj--);
}
return arr;
}
public static void reverse(int[][] arr,int li,int lj,int ri,int rj){
int count = ri-li;
for(int i=0;i<count;i++){
int tmp = arr[li][lj+i];
arr[li][lj+i] = arr[ri-i][lj];
arr[ri-i][lj] = arr[ri][rj-i];
arr[ri][rj-i] = arr[li+i][rj];
arr[li+i][rj] = tmp;
}
}
}