Robin Harcker

59.螺旋矩阵II

练习次数 **

       中等  │ 1295  │ 70.9% 的 619.3K

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

󰛨 示例 1:

img

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

󰛨 示例 2:

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

 提示:

* 1 <= n <= 20

题解:

// @leet start
func generateMatrix(n int) [][]int {
    ret := make([][]int, n)
    for i:= range ret {
        ret[i] = make([]int, n)
    }

    startx, starty := 0, 0
    loop, mid := n/2, n/2

    count := 1
    offset := 1

    var i int
    var j int

    for loop > 0 {
        i = startx;
        j = starty;

        for j = starty; j<n-offset; j++ {
            ret[startx][j] = count
            count++
        }
        for i = startx; i<n-offset; i++ {
            ret[i][j] = count
            count++
        }

        for j=j; j > starty; j-- {
            ret[i][j] = count
            count++
        }

        for i=i; i > startx; i-- {
            ret[i][j] = count
            count++
        }

        startx++
        starty++

        offset++
        loop--
    }
    if n%2 != 0 {
        ret[mid][mid] = count
    }

    return ret


}
// @leet end

另一个版本

func generateMatrix(n int) [][]int {
    // init rectangle
    digit := 1
    rectangle := make([][]int, n)
    for i := range rectangle {
        rectangle[i] = make([]int, n)
    }

    left, top, right, bottom := 0, 0, n-1, n-1

    for digit <= n*n {
        for i:= left; i<=right; i++ {
            rectangle[top][i] = digit
            digit++
        }
        top++

        for i:=top; i<= bottom; i++ {
            rectangle[i][right] = digit
            digit++
        }
        right--

        for i:=right; i>=left; i-- {
            rectangle[bottom][i] = digit
            digit++
        }
        bottom--

        for i:=bottom; i>= top; i-- {
            rectangle[i][left] = digit
            digit++
        }
        left++
    }

    return rectangle
}