zoukankan      html  css  js  c++  java
  • 转圈打印矩阵

    【题目】 给定一个整型矩阵matrix,请按照转圈的方式打印它。
    例如:
    1 2 3 4
    5 6 7 8
    9 10 11 12
    13 14 15 16
    打印结果为:1,2,3,4,8,12,16,15,14,13,9, 5,6,7,11, 10 【要求】 额外空间复杂度为O(1)。
    public class PrintMatrixSpiralOrder {
    public static void main(String[] args) {
    int arr[][] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
    print(arr);
    System.out.println("=================================");
    rotate(arr);
    }

    public static void rotate(int matrix[][]){
    int tr = 0; //起点的行坐标。
    int tc = 0; // 起点的纵坐标。
    int dr = matrix.length-1; //右下角元素的行坐标。
    int dc = matrix[0].length-1; //右下角元素的纵坐标。
    while (tr<=dr){ //判断跳出循环的条件,相当于层。用tc和dc易可。
    rotatePrint(matrix,tr++,tc++,dr--,dc--);
    }
    }
    //每一层的打印方法
    //分三种情况:
    //1,只有一行
    //2,只有一列
    //3,其序情况。
    public static void rotatePrint(int martix[][],int tr,int tc, int dr,int dc){
    if(tr==dr){ //第一种情况。
    for (int i=tc;i<=dc;i++){
    System.out.print(martix[tr][i]+" ");
    }
    }else if(tc==dc){ //第二种情况
    for (int i=tr;i<=dr;i++){
    System.out.print(martix[i][tc]+" ");
    }
    }else { //设置一个变量,从起点,转圈旋转到起点。
    int curR = tr;
    int curC = tc;
    while (curC!=dc){ //四个where为转圈打印。
    System.out.print(martix[tr][curC]+" ");
    curC++;
    }
    while (curR!=dr){
    System.out.print(martix[curR][dc]+" ");
    curR++;
    }
    while (curC!=tc){
    System.out.print(martix[dr][curC]+" ");
    curC--;
    }
    while (curR!=tr){
    System.out.print(martix[curR][tc]+" ");
    curR--;
    }
    }
    }
    public static void print(int arr[][]){
    for (int i =0;i<arr.length;i++){
    for (int j=0;j<arr[i].length;j++){
    System.out.print(arr[i][j]+" ");
    }
    System.out.println();
    }
    }
    }
    总结:按层打印,确定边界条件。
  • 相关阅读:
    DFS 之 全排列
    蓝桥杯: 标题:第几个幸运数
    第K个幸运数字(4、7)
    C++将十进制数转化为二进制
    C++中数组声名后不初始化,数组里的值都是0吗?
    html和jsp区别
    中缀表达式转换为后缀表达式
    多个Activity之间共享数据的方式
    Jupyter Notebook入门教程
    Android之Activity生命周期详解
  • 原文地址:https://www.cnblogs.com/liuwentao/p/9365346.html
Copyright © 2011-2022 走看看