美文网首页
381. 螺旋矩阵 II

381. 螺旋矩阵 II

作者: 6默默Welsh | 来源:发表于2018-03-13 10:45 被阅读5次

    描述

    给你一个数n生成一个包含1-n^2的螺旋形矩阵

    样例

    sn = 3
    矩阵为

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

    代码

    public class Solution {
        public int[][] generateMatrix(int n) {
            if (n < 0) {
                return null;
            }
    
            int[][] result = new int[n][n];
    
            int xStart = 0;
            int yStart = 0;
            // num 通过自增给矩阵元素赋值
            int num = 1;
    
            while (n > 0) {
                // 循环结束条件
                if (n == 1) {
                    result[yStart][xStart] = num++;
                    break;
                }
                
                // 生成一圈矩阵
                // 从左往右打印
                for (int i = 0; i < n - 1; i++) {
                    result[yStart][xStart + i] = num++;
                }
                
                // 从上到下打印 xStart + n - 1 即上述打印从 xStart 开始循环 n-1 次后值为 xStart+n-1
                // 从 0 到 n-1 只需要走 n-1 步
                for (int i = 0; i < n - 1; i++) {
                    result[yStart + i][xStart + n - 1] = num++;
                }
                
                // 从右往左打印
                for (int i = 0; i < n - 1; i++) {
                    result[yStart + n - 1][xStart + n - 1 - i] = num++;
                }
                
                // 从下往上打印
                for (int i = 0; i < n - 1; i++) {
                    result[yStart + n - 1 - i][xStart] = num++;
                }
    
                xStart++;
                yStart++;
                // n 代表剩余行列数
                n = n - 2;
            }
    
            return result;
        }
    }
    

    相关文章

      网友评论

          本文标题:381. 螺旋矩阵 II

          本文链接:https://www.haomeiwen.com/subject/cdmofftx.html