首页 > 代码库 > 矩阵的旋转

矩阵的旋转

一,给定一个矩阵,用二维数组表示,不一定是方阵(N*N),求矩阵的转置(向右),和向左转置。比如:

1 2 3

4 5 6

7 8 9

向右转置:

1 4 7

2 5 8

3 6 9

 

再比如:

1 2 3

4 5 6

向 左转置

3 6

2 5

1 4

 

二,实现思路

假设原来的矩阵是M*N,转置后变成了 N*M。设原矩阵是arr[M][N],创建一个新的矩阵 rev[N][M]

对于向右转置而言,就是线性代数里面的求AT,对于arr[M][N]里面的每个元素arr[i][j],将之赋值给 rev[j][i] 即可。

 

对于向左转置,对于arr[M][N]里面的每个元素arr[i][j],将之赋值给 rev[N-j-1][i] 即可。

 

三,完整代码

public class Test{        public static void main(String[] args) {        int[][] arr1 = {{1,2,3},{4,5,6},{7,8,9}};        int[][] arr2 = {{1,2,3},{4,5,6}};                reverseRight(arr1);        System.out.println("---------");        reverseRight(arr2);                System.out.println("***********");        reverseLeft(arr1);        System.out.println("-------------");        reverseLeft(arr2);    }        public static void reverseRight(int[][] arr){        int row = arr.length;        int col = arr[0].length;                int[][] rev = new int[col][row];                for(int i = 0; i < row; i++)        {            for(int j = 0; j < col; j++)                rev[j][i] = arr[i][j];        }                StringBuilder sb = new StringBuilder();        //打印旋转后的矩阵--有col行和 row 列        for(int i = 0; i < col; i++)        {            for(int j = 0; j < row; j++)            {                //System.out.print(rev[i][j]+" ");                sb.append(rev[i][j] + " ");            }            sb.deleteCharAt(sb.length()-1);            sb.append("\n");//            System.out.println();        }        System.out.println(sb.toString());    }        public static void reverseLeft(int[][] arr)    {        int row = arr.length;        int col = arr[0].length;                int[][] rev = new int[col][row];                for(int i = 0; i < row; i++)        {            for(int j = 0; j < col; j++)            {                rev[col-j-1][i] = arr[i][j];            }        }                //打印旋转后的矩阵--有col行和 row 列        for(int i = 0; i < col; i++)        {            for(int j = 0; j < row; j++)            {                System.out.print(rev[i][j] + " ");            }            System.out.println();        }    }}

 

矩阵的旋转