首页 > 试题广场 >

旋转数组

[编程题]旋转数组
  • 热度指数:56 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个整型正方形矩阵 Matrix,请把该矩阵调整成顺时针旋转90度的样子。


输入描述:
输入1+N行,第一行为矩阵行的个数N 
第2行到N+1数组中每行的数据,数字之间用英文逗号分隔


输出描述:
请遍历输出矩阵到一行
示例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

备注:
额外空间复杂度为O(1)
    public static int[][] rotationMatrix(int[][] matrix) {
        if (matrix != null && matrix.length > 0 && matrix.length == matrix[0].length) {
            int[][] result = new int[matrix.length][matrix.length];
            for (int i = 0; i < matrix.length; i++) {
                for (int j = 0; j < matrix[i].length; j++) {
                    result[i][j] = matrix[matrix.length - j - 1][i];
                }
            }
            return result;
        }
        return null;
    }

矩阵下标变换:ij → j(length - i)

也即新的下标: mn = (length - n)m
编辑于 2021-02-02 11:32:29 回复(0)
import java.util.*;
public class Main {
            private static void revote(int[][] matrix) {
                int n = matrix.length;
                int l = 0, r = n - 1, u = 0, b = n - 1;
                while (l < r && u < b) {
                    for (int i = l; i < r; i++) {
                        int tmp = matrix[u][i];
                        matrix[u][i] = matrix[n - 1 - i][l];
                        matrix[n - 1 - i][l] = matrix[b][n - 1 - i];
                        matrix[b][n - 1 - i] = matrix[i][r];
                        matrix[i][r] = tmp;
                    }
                    l++;
                    r--;
                    u++;
                    b--;
                }
            }
            public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                String s = sc.nextLine();
                int n = Integer.parseInt(s);
                int[][] matrix = new int[n][n];
                for (int i = 0; i < n; i++) {
                    s = sc.nextLine();
                    String[] ss = s.split(",");
                    for (int j = 0; j < n; j++) {
                        matrix[i][j] = Integer.parseInt(ss[j]);
                    }
                }
                revote(matrix);
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < n; i++) {
                    for (int j = 0; j < n; j++) {
                        sb.append(matrix[i][j]).append(",");
                    }
                }
                System.out.println(sb.substring(0, sb.length() - 1));
                sc.close();
            }
    
        }
发表于 2022-03-09 16:48:45 回复(0)