LeetCode 0059.螺旋矩阵II【Go】

简介: LeetCode 0059.螺旋矩阵II【Go】

螺旋矩阵II

LeetCode59. 螺旋矩阵 II

题目描述

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

示例1:

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例2:

输入:n = 1
输出:[[1]]

思路

题目要求

  • 输入一个正整数n,要求生成一个二维矩阵,元素按顺时针螺旋顺序排列。
  • 返回生成的二维矩阵

模拟顺时针画矩阵的过程:

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

由外向内一圈一圈这么画下去。

生成一个 n×n 空矩阵 matrix,随后模拟整个向内环绕的填入过程:

  • 定义左右上下边界 left=0,right=n-1,top=0,bottom=n-1,初始值 num = 1,迭代终止值 target = n * n
  • num <= tar时,始终按照从左到右从上到下从右到左从下到上填入顺序循环,每次填入后:
  • 执行 num += 1:得到下一个需要填入的数字;
  • 更新边界
  • 从左到右填完后,上边界top += 1,相当于上边界向内缩 1
  • 从上到下填完后,右边界right -= 1,相当于右边界向内缩 1
  • 从右到左填完后,下边界bottom -= 1,相当于下边界向内缩 1。
  • 从下到上填完后,左边界left += 1,相当于左边界向内缩 1。
  • 最终返回 matrix 即可。

注意

  • 填入一个数字后记得num+1
  • 填入一行/列后记得更新边界

代码

Go

func generateMatrix(n int) [][]int {
  left, right, top, bottom := 0, n-1, 0, n-1
  num := 1
  target := n * n
  matrix := make([][]int, n)
  for i := 0; i < n; i++ {
    matrix[i] = make([]int, n)
  }
  for num <= target {
    // left to right
    for i := left; i <= right; i++ {
      matrix[top][i] = num
      num++
    }
    top++
    // top to bottom
    for i := top; i <= bottom; i++ {
      matrix[i][right] = num
      num++
    }
    right--
    // right to left
    for i := right; i >= left; i-- {
      matrix[bottom][i] = num
      num++
    }
    bottom--
    // bottom to top
    for i := bottom; i >= top; i-- {
      matrix[i][left] = num
      num++
    }
    left++
  }
  return matrix
}

Link

GitHub

目录
相关文章
|
9月前
【Leetcode -2181.合并零之间的节点- 2326.螺旋矩阵Ⅳ】
【Leetcode -2181.合并零之间的节点- 2326.螺旋矩阵Ⅳ】
51 0
|
11天前
leetcode54螺旋矩阵题解
leetcode54螺旋矩阵题解
10 2
|
21天前
|
算法 机器人 数据挖掘
LeetCode题目54:螺旋矩阵【python4种算法实现】
LeetCode题目54:螺旋矩阵【python4种算法实现】
|
2天前
|
存储 算法
力扣经典150题第三十五题:螺旋矩阵
力扣经典150题第三十五题:螺旋矩阵
5 0
|
21天前
|
SQL 算法 数据挖掘
LeetCode 第四题:寻找两个正序数组的中位数 【4/1000 】【python + go】
LeetCode 第四题:寻找两个正序数组的中位数 【4/1000 】【python + go】
|
25天前
|
算法 Java Go
【经典算法】LeetCode 392 判断子序列(Java/C/Python3/Go实现含注释说明,Easy)
【经典算法】LeetCode 392 判断子序列(Java/C/Python3/Go实现含注释说明,Easy)
20 0
|
25天前
|
存储 算法 Java
【经典算法】LeetCode112. 路径总和(Java/C/Python3/Go实现含注释说明,Easy)
【经典算法】LeetCode112. 路径总和(Java/C/Python3/Go实现含注释说明,Easy)
11 0
|
25天前
|
算法 Java Go
【经典算法】LeetCode 100. 相同的树(Java/C/Python3/Go实现含注释说明,Easy)
【经典算法】LeetCode 100. 相同的树(Java/C/Python3/Go实现含注释说明,Easy)
9 0
|
25天前
|
算法 Java Go
【经典算法】LeetCode 58.最后一个单词的长度(Java/C/Python3/Go实现含注释说明,Easy)
【经典算法】LeetCode 58.最后一个单词的长度(Java/C/Python3/Go实现含注释说明,Easy)
15 0
|
25天前
|
算法 Java 大数据
【经典算法】LeetCode 283. 移动零(Java/C/Python3/Go实现含注释说明,Easy)
【经典算法】LeetCode 283. 移动零(Java/C/Python3/Go实现含注释说明,Easy)
13 0