题目59.螺旋矩阵II
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[ [ 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
}