• [leetCode]59. 螺旋矩阵 II


    在这里插入图片描述

    模拟


    模拟顺时针画矩阵过程

    • 填充上行,从左到右
    • 填充右列,从上到下
    • 填充下行,从右到左
    • 填充左列,从下到上

    画一圈需要画四条边,需要注意的是每画一条边都需要遵循「左闭右开」原则
    ,也就是说每一条边的画法要相同,不然代码会越写越乱。
    下面按照左闭右开原则画一圈:

    在这里插入图片描述
    每一种颜色代表一条边,在拐角处画新的边。

    class Solution {
        public int[][] generateMatrix(int n) {
            // 定义一个二维数组
            int[][] ans = new int[n][n];
            // 定义每循环一个圈的起始位置
            int startX = 0, startY = 0;
            // 每个圈循环几次
            int loop = n/2;
            // 矩阵中间位置
            int mid = n/2;
            // 用来给矩阵中每一个空格赋值
            int count = 1;
            // 每循环一圈需要控制每一条边的遍历长度
            int offset = 1;
            int i, j;
            while (loop-- > 0) {
                // 模拟填充上行,从左到右(左闭右开)
                for (j = startY; j < startY + n - offset; j++) {
                    ans[startX][j] = count++;
                }
                for (i = startX; i < startX + n - offset; i++) {
                    ans[i][j] = count++;
                }
                for (; j > startY; j--) {
                    ans[i][j] = count++;
                }
                for (; i > startX; i--) {
                    ans[i][j] = count++;
                }
    
                // 第二圈开始后起始位置各自加1
                startX++;
                startY++;
    
                // 控制每一条边的遍历长度
                offset+=2;
            }
    
            // 如果n为奇数,则需要单独为中间位置赋值
            if (n % 2 != 0) {
                ans[mid][mid] = count;
            }
            return ans;
        }
    }
    
  • 相关阅读:
    js 运算符优先级
    原生js获取样式
    RGBA 与opacity
    闭包(自己的学习+理解~~水水的)
    css 单位-px、em、rem、百分比
    js之正则1
    querySelector和querySelectorAll
    关于瀑布流的算法(转淘宝ued)
    瀑布流的几个注意点
    jsonp跨域
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13864817.html
Copyright © 2020-2023  润新知