首页 > 代码库 > 矩阵的旋转
矩阵的旋转
一,给定一个矩阵,用二维数组表示,不一定是方阵(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(); } }}
矩阵的旋转
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。