【数组】leetcode59——螺旋矩阵II

题目59.螺旋矩阵II

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

示例:

输入: 3

输出:

【数组】leetcode59——螺旋矩阵II

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

思路

这题主要考咱们的是模拟能力和对代码的掌握能力,特别是对边界的考虑。

我们可以将填充矩阵元素分为以下四个过程:

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

这里可以看到需要引入left,right,top,bottom四个变量作为边界的控制,因为矩阵从0开始,所以四个变量分别初始化为left=0 right=n-1 top=0 bottom=n-1 (其中n为给定正整数)接下里就是按照填充顺序进行模拟。

具体代码如下:

func generateMatrix(n int) [][]int {
	left, right, top, bottom := 0, n-1, 0, n-1
	//创建二维用于填充的二维数组  注意:golang的二维数组创建比较特殊
    matrix := make([][]int,n)
    for i:=0;i<n;i++{
        matrix[i] = make([]int,n)
    }
    
    //开始模拟  用于填充数字的范围是[1,n*n]
    num,target := 1,n*n  
    for num <= target {
        //填充上行  从左到右
        for i:=left;i<=right;i++{
            matrix[top][i] = num
            num++
        }
        top++  

        //填充右列  从上到下
        for i:=top;i<=bottom;i++{
            matrix[i][right] = num
            num++
        }
        right--

        //填充下行  从右到左
        for i:=right;i>=left;i--{
            matrix[bottom][i] = num
            num++
        }
        bottom--

        //填充左列  从下到上
        for i:=bottom;i>=top;i--{
            matrix[i][left] = num
            num++
        }
		left++
    }
  	return matrix
}

上一篇:[CF1467B] Hills And Valleys


下一篇:css布局实现:子元素固定定位父元素+遮罩+滚动条+隐藏滚动条