zoukankan      html  css  js  c++  java
  • Zigzag数组 -- 面试宝典

    最近在看面试宝典,其中看到一个题目说:输入一个正整数n,输出它的zigzag数组。

    分析:书上给出了数学方面的思考然后给了代码。但是我感觉如果真是面试或者考试遇到的话,我这种笨脑袋肯定是想不出来的,因此最好的方式是观察数组,然后找到规律。观察可知,数字递增的方向只有4个:right, left-down, down, right-up。因此我们可以设置一个switch语句,然后每走一步,判断下步要走的方向。因为输出的是n*n的数组,因此矩阵的右下角的数字肯定不会超过n*n,用它作为结束条件即可。

     (需要注意的是:刚开始做时忘记考虑矩阵赋值了一半时,右下角的怎么赋值。因此每个方向走完了,下一步都会有两种方向。不要忘记右下角的赋值。)

    代码如下:

    public class Test {
        static int[][] zigzag(int n) {
            int[][] a = new int[100][100];
            int right = 0, left_down = 1, down = 2, right_up = 3;
            int s = 0;
            int it = n * n;
            int flag = 0;
            int i = 0, j = 0;
            while(s <= it) {
                a[i][j] = s;
                switch (flag){
                case 0: { //right
                    j++;
                    if(0 == i) 
                        flag = 1;
                    else if(n-1 == i)
                        flag = 3;
                    break;
                }
                case 1: {//left-down
                    i++;
                    j--;
                    if(j == 0)
                        flag = 2;
                    else if(i == n-1)
                        flag = 0;
                    break;
                }
                case 2: {//down
                    i++;
                    if(0 == j)
                        flag = 3;
                    else if(n-1 == j)
                        flag = 1;
                        break;
    
                }
                case 3: {
                    i--;
                    j++;
                    if(0 == i)
                        flag = 0;
                    else if(n-1 == j)
                        flag = 2;
                    break;
                }
                
                }
                s++;    
            }
            return a;
        }
        
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int n = 7;
             int[][]a =  zigzag(n);
            for(int i=0; i<n; i++) {
                for(int j=0; j<n; j++) {
                    System.out.print(a[i][j] + "  ");
                }
                System.out.println();
            }
    
        }
    
    }
  • 相关阅读:
    sql server 数据库巡检脚本
    Scala核心编程_第16章_ Akka高并发编程
    mysql临时表-两种临时表
    Scala核心编程_第15章_ scala并发编程
    Scala核心编程_第14章_函数式编程高级
    如何用 React 构建前端架构
    程序员不能一直停留在爱学习的阶段
    Spring Boot使用layui的字体图标时无法正常显示解决办法
    npm ERR! Response timeout while trying to fetch (over 30000ms)
    PostGIS9.3安装
  • 原文地址:https://www.cnblogs.com/little-YTMM/p/5105918.html
Copyright © 2011-2022 走看看