• (面试题)如何之字形打印二维数组


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

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

    我们设置两个指针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判断即可!~

  • 相关阅读:
    js运算符逻辑!和instanceof的优先级
    一道关于数组的前端面试题
    关于变量提升
    关于offsetParent
    获取地址栏的参数列表,并转化为对象
    关于类型转换
    bootstrap-4
    bootstrap-3
    bootStrap-2
    bootStrap-1
  • 原文地址:https://www.cnblogs.com/taobean/p/12364259.html
Copyright © 2020-2023  润新知