解法:按层模拟 解法比 54. 螺旋矩阵 简单不少。
一图解所有:

常规思路,需要注意一个地方:
使用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()
}
} 本站广告由 Google AdSense 提供
0条评论