zoukankan      html  css  js  c++  java
  • 记一道螺旋矩阵顺序输出题

    输入一个螺旋矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字:

    示例:

    1、

    输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

    2、

     

    输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

    3、

     

    输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]

    题目分析:

    这个题目的要求就是打印一个环,这个环是从外到内。

    总结:这个题目的关键点就是找到四个方便变化的状态和终止遍历的条件。

    参考代码:

    public static void main(String[] args) {
            int[][] arr = {
                    {1, 2, 3},
                    {8, 9, 4},
                    {7, 6, 5}
            };
    //        int[][] arr = {{1, 2, 3, 4}, {12, 13, 14, 5}, {11, 16, 15, 6}, {10, 9, 8, 7}};
    //        int[][] arr = {
    //                {1, 2, 3, 4, 5},
    //                {16, 17, 18, 19, 6},
    //                {15, 24, 25, 20, 7},
    //                {14, 23, 22, 21, 8},
    //                {13, 12, 11, 10, 9}
    //        };
    
    
            int[] a = spiralMatrix(arr);
            System.out.println(Arrays.toString(a));
        }
    
        public static int[] spiralMatrix(int[][] arr) {
    
            int rightIndex = 0;
            int length = arr.length * arr[0].length;
            int a[] = new int[length];
            int[] position = {0, 0};
            int direction = 0;
            int losex = 0;
            int losey = 0;
            int xstep = 0;
            int ystep = 0;
    
            int loopIndex = 0;
    
            while (rightIndex < length) {
                if (loopIndex++ > length) {
                    break;
                }
                int xlength = arr[position[1]].length - losex;
                int ylength = arr.length - losey;
    
                System.out.println(" rightIndex:" + rightIndex + "=>  x:" + position[1] + ", y:" + position[0] + ", direction:" + direction);
    
                a[rightIndex++] = arr[position[0]][position[1]];
    
                switch (direction) {
                    case 1:
                        if (++xstep < ylength) {
                            position[0]++;
                        } else {
                            direction = 2;
                            position[1]--;
                            losex++;
                            xstep = 0;
                            ystep = 0;
                        }
                        break;
                    case 2:
                        if (++ystep < xlength) {
                            position[1]--;
                        } else {
                            direction = 3;
                            position[0]--;
                            losey++;
                            xstep = 0;
                            ystep = 0;
                        }
                        break;
                    case 3:
                        if (++xstep < ylength) {
                            position[0]--;
                        } else {
                            direction = 0;
                            position[1]++;
                            losex++;
                            xstep = 0;
                            ystep = 0;
                        }
                        break;
                    default:
                        if (++ystep < xlength) {
                            position[1]++;  // x++
                        } else {
                            direction = 1;
                            position[0]++; // y++
                            losey++;
                            xstep = 0;
                            ystep = 0;
                        }
                        break;
                }
            }
            return a;
    
        }
  • 相关阅读:
    最全最新java面试题系列全家桶(带答案)
    [多平台]pymo – 手机上的 GalGame 引擎
    Hyperledger Fabric-sdk-java
    Nginx、OpenResty和Kong的基本概念与使用方法
    nginx代理 tomcat获得真实用户IP
    nodejs+gulp+webpack基础知识
    开始写下自己的python的cocos2d, pyglet学习
    机器学习算法GBDT的面试要点总结-上篇
    Python 最常见的 170 道面试题解析:2019 最新
    VCL消息处理机制
  • 原文地址:https://www.cnblogs.com/cfsxgogogo/p/13840481.html
Copyright © 2011-2022 走看看