zoukankan      html  css  js  c++  java
  • [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;
        }
    }
    
  • 相关阅读:
    枚举代码(待更新)
    数据类型
    char
    opencv中读写视频
    数据获取与存储
    Mat 与 IplImage 和 CvMat 的转换
    Mat类的输出格式
    Mat 类的内存管理
    Mat_类
    Mat表达式
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13864817.html
Copyright © 2011-2022 走看看