zoukankan      html  css  js  c++  java
  • 矩阵的旋转

    一,给定一个矩阵,用二维数组表示,不一定是方阵(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("
    ");
    //            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();
            }
        }
    }
  • 相关阅读:
    安装VMware Workstation提示the msi failed的解决办法
    windows2008中没有右键个性化
    delphi调用AdoQuery实现SqlSever的存储过程(返回)
    delphi 如何解决假死
    用A4打印总账,预览及打印无表头。。
    解决VMWare“Could not get vmci driver version句柄无效”的错误
    第一章 认识jQuery
    jQuery $.each用法
    jquery ui tabs详解(中文)
    javascript面向对象
  • 原文地址:https://www.cnblogs.com/hapjin/p/5859001.html
Copyright © 2011-2022 走看看