解法:按层模拟 解法比 54. 螺旋矩阵 简单不少。
一图解所有:
![](https://i.lckiss.com/wp-content/uploads/2020/11/2020111902240128-1024x683.png)
常规思路,需要注意一个地方:
使用num <= tar
而不是l < r || t < b
作为迭代条件,是为了解决当n
为奇数时,矩阵中心数字无法在迭代过程中被填充的问题。
class Some59Solution { fun generateMatrix(n: Int): Array<IntArray> { if (n <= 0) return emptyArray() val matrix = Array(n) { IntArray(n) } val tar = n * n var num = 1 var l = 0 var r = n - 1 var t = 0 var b = n - 1 while (num <= tar) { for (i in l..r) matrix[t][i] = num++ t++ for (i in t..b) matrix[i][r] = num++ r-- for (i in r downTo l) matrix[b][i] = num++ b-- for (i in b downTo t) matrix[i][l] = num++ l++ } return matrix } } fun main() { Some59Solution().generateMatrix(5).forEach { it.forEach { print("$it ") } println() } }
本站由以下主机服务商提供服务支持:
0条评论