type pair struct{ x, y int }
//向右 行不变列增,向下 行增列不变,向左 行不变列减,向上 行减列不变
var dirs = []pair{{0, 1}, {1, 0}, {0, -1}, {-1, 0}} // 右下左上
func generateMatrix(n int) [][]int {
matrix := make([][]int, n)
for i := range matrix {
matrix[i] = make([]int, n)
}
row, col, dirIdx := 0, 0, 0
for i := 1; i <= n*n; i++ {
matrix[row][col] = i
//旋转方向,dir推导为一维数组,即方向dirIndx组方向 (共有4组右下左上)
dir := dirs[dirIdx]
// r,c 赋值为 行加方向,列加方向 预测接下来需要接继或转向进行条件;
// r行到上边界/下边界 c列到左边界/右边界 matrix数组内有值(即之前已经赋值)
if r, c := row+dir.x, col+dir.y; r < 0 || r >= n || c < 0 || c >= n || matrix[r][c] > 0 {
dirIdx = (dirIdx + 1) % 4 // 顺时针旋转至下一个方向
dir = dirs[dirIdx]
}
//接继或转向
row += dir.x
col += dir.y
}
return matrix
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/spiral-matrix-ii/solution/luo-xuan-ju-zhen-ii-by-leetcode-solution-f7fp/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。