leetCode59. 螺旋矩阵 II

leetCode59. 螺旋矩阵 II

题目描述

/**
     * 
     * 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,
     * 且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
     * 
     */

思路分析

  1. 螺旋生成矩阵,可以将一个矩阵看作二维数组,也就是按照顺时针在二维数组中填充数据
  2. 可以分层来填充,即从最外层到最内层依次填充数据,只需要考虑一层的填充结果,然后使用循环依次填充每一层即可
  3. 定义四个变量 left right top bottom ,表示每一层的四条边,则每次填充就是对这四条边的填充,只需要改变相应的变量即可
  4. 注意每个角不能重复填充,否则会覆盖,因此需要执行 + 1 或者 - 1的操作
  5. 源码及详解见下

源码及分析

/**
     *
     * @param n 要生成的矩阵层数
     * @return  返回生成的矩阵
     */
    public int[][] generateMatrix(int n) {
        //定义二维数组保存生成的结果
        int[][] matrix = new int[n][n];
        //定义变量 n 为向矩阵填充的数字
        int num = 1;
        //按照从最外层向最内层填充的方法,定义四个变量依次保存上下左右的位置,默认在最外层
        int left = 0 , right = n - 1, top = 0, bottom = n - 1;
        //循环填充每一层
        while (left <= right && top <= bottom){
            //先填充最外层
            //上侧
            for (int i = left; i <= right ; i++) {
                matrix[top][i] = num;
                num++;
            }
            //右侧
            for (int i = top + 1; i <= bottom ; i++) {
                matrix[i][right] = num;
                num++;
            }
            //下侧
            for (int i = right - 1; i >= left ; i--) {
                matrix[bottom][i] = num;
                num++;
            }
            //左侧
            for (int i = bottom - 1; i > top ; i--) {
                matrix[i][left] = num;
                num++;
            }
            //改变变量,及向内移动一层
            left++;
            right--;
            top++;
            bottom--;
        }
        return matrix;
    }
posted @ 2021-06-03 10:00  mx_info  阅读(70)  评论(0)    收藏  举报