题目
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素题目链接
分析
旨在考验代码功底,一个循环变量i控制整个循环,上下遍历维持闭区间,左右遍历维持开区间(原因为四角重复), 注意两点
- 循环跳出条件
- 遍历下、左遍历不一定存在,需要额外判断是否遍历过
fun spiralOrder(matrix: Array<IntArray>): List<Int> {
var i = 0
val row = matrix.size
val colum = matrix[0].size
val result = mutableListOf<Int>()
while (i * 2 < min(row, colum)) {
//添加上
for (j in i until colum - i) {
result.add(matrix[i][j])
}
//添加右
for (j in i + 1 until row - i - 1) {
result.add(matrix[j][colum - i - 1])
}
//添加下
if (row - i - 1 > i) {
for (j in colum - i - 1 downTo i) {
result.add(matrix[row - i - 1][j])
}
}
//添加左
if (i < colum - i - 1) {
for (j in row - i - 2 downTo i + 1) {
result.add(matrix[j][i])
}
}
i++
}
return result
}
关于我
一个希望友友们能提出建议的代码下毒糕手