zoukankan      html  css  js  c++  java
  • (面试题)如何之字形打印二维数组

    什么是之字形打印二维数组:
    比如给定一个二维数组

    在这里插入图片描述
    按照红色线路打印,即称作“之”字型打印
    在这里插入图片描述
    怎么实现呢?想要直接寻找每个位置与位置之间的关系是很难的,所以我们需要从这个线路着手,怎么能走出这样的线路呢?

    我们设置两个指针a和b,各自的行走线路如下:

    在这里插入图片描述

    有什么用呢?ab总能形成一个对角线,在这里插入图片描述

    形成了对角线,然后设置一个boolean类型的flag,控制打印的方向,如果flag为true,就从下往上打印,如果为false就从上往下打印
    所以打印顺序就是这样:
    在这里插入图片描述.看一下代码:

    package Mianshi;
    
    public class PrintZhi {
    
        public static void printZhi(int[][] arr){
            int aR = 0;//a的行坐标
            int aC = 0;//a的列坐标
            int bR = 0;//b的行坐标
            int bC = 0;//b的列坐标
            int endR = arr.length - 1;//b走到endR表示走完了
            int endC = arr[0].length - 1;//a走到endC表示走完了
            boolean flag = false;
            while(endR + 1 != aR){
                printTmpArrNum(arr, aR,aC,bR,bC,flag);
                aR = aC == endC ? aR + 1 : aR;//不能写aR++
                aC = aC == endC ? aC : aC + 1;
                bC = bR == endR ? bC + 1 : bC;
                bR = bR == endR ? bR : bR + 1;
                flag = !flag;
                System.out.println();
            }
        }
    
        private static void printTmpArrNum(int[][] arr, int aR, int aC, int bR, int bC, boolean flag) {
            if (flag){
                while (aR != bR + 1)
                    System.out.print(arr[aR++][aC--]+" ");
            }else {
                while (bR != aR - 1){
                    System.out.print(arr[bR--][bC++]+" ");
                }
            }
        }
    
        public static void main(String[] args) {
            int[][] matrix = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
            printZhi(matrix);
        }
    }
    
    

    生成一个图,便于理解:
    在这里插入图片描述
    a,b最开始都是(0,0),(3,3)作为终止条件,如果a的行到了3,说明他执行完毕了,因为a先往右走,到了(0,3),还是第0行,然后才往下走,等行数到了3,才终止。
    b是从下开始走,到了(3,0),然后右拐,直到(3,3)终止。

    找到了a,b的坐标以后打印就比较简单了,只要通过boolean判断即可!~

  • 相关阅读:
    设计模式系列
    Python3 系列之 可变参数和关键字参数
    设计模式系列
    【HANA系列】SAP HANA ODBC error due to mismatch of version
    【FICO系列】SAP FICO FS00修改科目为未清项目管理
    【FIORI系列】SAP OpenUI5 (SAPUI5) js框架简单介绍
    【HANA系列】SAP HANA SQL获取当前日期加若干天后的日期
    【HANA系列】SAP HANA SQL获取本周的周一
    【HANA系列】SAP HANA SQL获取当前日期
    【HANA系列】SAP HANA SQL获取当前日期最后一天
  • 原文地址:https://www.cnblogs.com/taobean/p/12364259.html
Copyright © 2011-2022 走看看