zoukankan      html  css  js  c++  java
  • 算法笔记-之字形打印数组

      看到这道题一开始不知道从何入手,做完这道题有一种感受,那就是二维数组的题其实也没有那么难,用二维数组的两个下标控制需要的点移动就可以了。回到这一题,我们使用双指针去操作,如下图所示:

      

     a指针向右移动直到移动至4的位置,向下移动,b指针先向下移动直到移动到9的位置向右移动,这样就可以找到对称点,至于如何控制之字形的路径,我们可以发现一个规律,之字形一定是一上一下这样一次次迭代下去的,由此我们可以使用一个布尔变量控制选择上面的点还是下面的点,代码如下:

    public class ZhizixingTest {
    
        static boolean f = false;
        public static void zhizi(int[][] arr){
             int aL = 0;
             int aR = 0;
             int bL = 0;
             int bR = 0;
            int endL = arr[0].length-1;
            int endR = arr.length-1;
            while (bL != endL+1){
                printZz(arr,aL,aR,bL,bR);
                aR = aL == endL ? aR+1 : aR;
                aL = aL == endL ? aL  : aL+1;
                bL = bR == endR ? bL+1 : bL;
                bR = bR == endR ? bR : bR+1;
            }
        }
    
        private static void printZz(int[][] arr, int aL, int aR, int bL, int bR) {
            if(f){
                while(aL != bL-1)
                System.out.println(arr[aR++][aL--]);
            }else{
                while (bL != aL+1)
                System.out.println(arr[bR--][bL++]);
            }
            f = !f;
        }
    
    
        public static void main(String[] args) {
            int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
            zhizi(arr);
        }
    }

    代码看着很简单,主要还是前面的逻辑,这里我被一个问题困了挺长时间,我需要判断aL变量的大小,但是却把值的修改放到了前面,导致我后面判断时,总是和我想的不一样,写在此处,告诫自己,以后注意!!!

  • 相关阅读:
    机器学习【九】数据表达与特征工程
    机器学习【八】数据预处理、降维、特征提取及聚类
    机器学习【七】神经网络
    机器学习【六】支持向量机SVM——专治线性不可分
    机器学习【五】随机森林
    机器学习【四】决策树
    单片机简介 & 点亮LED & 流水灯 & 电路基础
    PHP表单
    机器学习【三】朴素贝叶斯
    PHP 【六】
  • 原文地址:https://www.cnblogs.com/gmt-hao/p/14897323.html
Copyright © 2011-2022 走看看