136 - 59 螺旋矩阵2

题目

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

示例:

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

解答

就。硬算。。

https://leetcode-cn.com/problems/spiral-matrix-ii/solution/spiral-matrix-ii-mo-ni-fa-she-ding-bian-jie-qing-x/

var generateMatrix = function(n) {
  const mat = new Array(n)
  for (let i = 0; i < n; i++) {
    mat[i] = new Array(n)
  }
  let l = 0,
    r = n - 1,
    t = 0,
    b = n - 1,
    now = 0,
    tar = n * n
  while (now < tar) {
    for (let i = l; i <= r; i++) {
      mat[t][i] = ++now
    }
    for (let i = ++t; i <= b; i++) {
      mat[i][r] = ++now
    }
    for (let i = --r; i >= l; i--) {
      mat[b][i] = ++now
    }
    for (let i = --b; i >= t; i--) {
      mat[i][l] = ++now
    }
    l++
  }
  return mat
};

Runtime: 52 ms, faster than 85.66% of JavaScript online submissions for Spiral Matrix II.

Memory Usage: 33.8 MB, less than 100.00% of JavaScript online submissions for Spiral Matrix II.

https://leetcode-cn.com/problems/spiral-matrix-ii/solution/yang-cong-bian-li-tian-chong-fa-by-mei-de-gan-qing/

image-20191108112729651
var generateMatrix = function(n) {
  const mat = new Array(n)
  for (let i = 0; i < n; i++) {
    mat[i] = new Array(n)
  }
  for (let s = 0, e = n - 1, m = 1; s <= e; s++, e--) {
    if (s === e) {
      mat[s][e] = m++
    }
    for (let i = s; i <= e - 1; i++) {
      mat[s][i] = m++
    }
    for (let i = s; i <= e - 1; i++) {
      mat[i][e] = m++
    }
    for (let i = e; i >= s + 1; i--) {
      mat[e][i] = m++
    }
    for (let i = e; i >= s + 1; i--) {
      mat[i][s] = m++
    }
  }
  return mat
};

Runtime: 60 ms, faster than 34.40% of JavaScript online submissions for Spiral Matrix II.

Memory Usage: 33.9 MB, less than 100.00% of JavaScript online submissions for Spiral Matrix II.

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        mat = [[0 for _ in range(n)] for _ in range(n)]
        s = 0
        e = n-1
        m = 1
        while s <= e:
            if s == e:
                mat[s][e] = m
                m += 1
            for i in range(s, e):
                mat[s][i] = m
                m += 1
            for i in range(s, e):
                mat[i][e] = m
                m += 1
            for i in range(e, s, -1):
                mat[e][i] = m
                m += 1
            for i in range(e, s, -1):
                mat[i][s] = m
                m += 1
            s += 1
            e -= 1
        return mat

Runtime: 24 ms, faster than 99.97% of Python3 online submissions for Spiral Matrix II.

Memory Usage: 12.8 MB, less than 100.00% of Python3 online submissions for Spiral Matrix II.

Last updated

Was this helpful?