Java实现N*M非方阵90°顺时针旋转的开发方案求教
Java实现N*M矩阵90°顺时针旋转方案
核心逻辑
原矩阵维度为n行 * m列,旋转后矩阵维度变为m行 * n列,原矩阵坐标(原行号r, 原列号c)对应新矩阵坐标规则为:
- 新行号 = 原列号c
- 新列号 = 原矩阵总行数n - 1 - 原行号r
以你给出的3行4列示例验证:
原矩阵[0][0] = 1,对应新矩阵[0][2] = 1
原矩阵[2][3] = 2,对应新矩阵[3][0] = 2
完全符合预期旋转效果。
完整实现代码
public class MatrixRotation { // 90°顺时针旋转核心方法 public static int[][] rotateClockwise90(int[][] matrix) { // 边界异常处理 if (matrix == null || matrix.length == 0 || matrix[0].length == 0) { return new int[0][0]; } int originRows = matrix.length; int originCols = matrix[0].length; // 初始化旋转后矩阵,行列维度互换 int[][] rotatedMatrix = new int[originCols][originRows]; // 遍历原矩阵完成坐标映射赋值 for (int r = 0; r < originRows; r++) { for (int c = 0; c < originCols; c++) { rotatedMatrix[c][originRows - 1 - r] = matrix[r][c]; } } return rotatedMatrix; } // 矩阵打印辅助方法,用于效果验证 public static void printMatrix(int[][] matrix) { for (int[] row : matrix) { for (int i = 0; i < row.length; i++) { System.out.print(row[i]); if (i != row.length - 1) { System.out.print(", "); } } System.out.println(); } } public static void main(String[] args) { // 测试3*4非方阵旋转 System.out.println("=== 3*4原矩阵 ==="); int[][] matrix3x4 = {{1,2,3,4}, {5,6,7,8}, {9,0,1,2}}; printMatrix(matrix3x4); System.out.println("=== 旋转后4*3矩阵 ==="); int[][] rotated4x3 = rotateClockwise90(matrix3x4); printMatrix(rotated4x3); // 测试3*3方阵旋转 System.out.println("\n=== 3*3原矩阵 ==="); int[][] matrix3x3 = {{1,2,3}, {4,5,6}, {7,8,9}}; printMatrix(matrix3x3); System.out.println("=== 旋转后3*3矩阵 ==="); int[][] rotated3x3 = rotateClockwise90(matrix3x3); printMatrix(rotated3x3); } }
实现说明
- 兼容空矩阵、单行/单列矩阵等边界场景
- 时间复杂度O(n*m):仅需遍历一次原矩阵所有元素
- 空间复杂度O(n*m):生成独立的新矩阵,不修改原矩阵内容,非方阵场景不推荐原地修改,实现成本极高且无明显性能收益
内容的提问来源于stack exchange,提问作者Ben Wunderlich
相关产品推荐
相关产品推荐

