首页 > 试题广场 >

将正方形矩阵顺时针旋转90度

[编程题]将正方形矩阵顺时针旋转90度
  • 热度指数:1380 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个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

备注:
额外空间复杂度
//java翻转矩阵

import java.io.*;
public class Main {
   public static void main(String[] args) throws Exception {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       String[] str1 = br.readLine().split(" ");
       int n = Integer.parseInt(str1[0]);  //行数
       int m = n;
       int[][] matrix = new int[n][m];
       for (int i = 0; i < n; i++) {
           String[] str2 = br.readLine().split(" ");
           for (int j = 0; j < m; j++) {
               matrix[i][j] = Integer.parseInt(str2[j]);
           }
       }
       process(matrix);
       for(int i=0;i<matrix.length;i++){
            for (int j=0;j<matrix[0].length;j++){
                System.out.print(matrix[i][j]+" ");
            }
            System.out.println();
        }
   }
    public static void process(int[][] matrix){
        int n = matrix.length;
        int m = matrix[0].length;
        int temp;
        //上下翻转
        for (int i=0;i<n/2;i++){
            for(int j=0;j<m;j++){
                temp = matrix[i][j];
                matrix[i][j] = matrix[n-i-1][j];
                matrix[n-i-1][j] = temp;
            }
        }
        //对角线翻转
        for (int i=1;i<n;i++){
            for(int j=0;j<i;j++){
                temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
    }
}
发表于 2022-03-15 10:37:32 回复(0)
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine().trim());
        String[][] arr = new String[n][n];
        for(int i=0;i<n;i++){
            arr[i] = br.readLine().trim().split(" ");
        }
        rotate(arr);
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                sb.append(arr[i][j]).append(" ");
            }
            sb.append("\n");
        }
        System.out.print(sb.toString());
    }
    private static void rotate(String[][] arr){
        if(arr==null||arr.length<1) return;
        int tr=0;
        int tc=0;
        int dr=arr.length-1;
        int dc = arr[0].length-1;
        while(tr<=dr&&tc<=dc){
            rotateEdge(arr,tr++,tc++,dr--,dc--);
        }
    }
    private static void rotateEdge(String[][] arr,int tr,int tc,int dr,int dc){
        int t = dc-tc;
        String temp;
        for(int i=0;i<t;i++){
            temp = arr[tr][tc+i];
            arr[tr][tc+i] = arr[dr-i][tc];
            arr[dr-i][tc] = arr[dr][dc-i];
            arr[dr][dc-i] = arr[tr+i][dc];
            arr[tr+i][dc] = temp;
        }
    }
}

发表于 2021-03-11 10:57:24 回复(0)
import java.util.Scanner;

public class Main{
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        int[][] two = new int[n][n];
        for(int i = 0; i < n; i++){
            String s = sc.nextLine();
            String[] ss = s.split(" ");
            for(int j = 0; j < n; j++){
                two[i][j] = Integer.parseInt(ss[j]);
            }
        }
        int[][] one = new int[n][n];
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                System.out.print(two[n-j-1][i]+" ");
            }
            System.out.println();
        }
        
        
    }
}

发表于 2020-03-20 22:15:54 回复(0)
import java.util.Scanner;

public class Main {

    public 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--);
        }
    }

    public static void rotateEdge(int[][] matrix, int tR, int tC, int dR, int dC) {
        int times = dR - tR;
        for (int i = 0; i < times; i++) {
            int 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;
        }
    }

    public static void printMatrix(int[][] matrix) {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] matrix = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                matrix[i][j] =sc.nextInt();
            }
        }
        rotate(matrix);
        printMatrix(matrix);
    }
}
编辑于 2019-10-08 19:59:23 回复(0)