54. 螺旋矩阵

71 阅读1分钟

题目

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素题目链接

分析

旨在考验代码功底,一个循环变量i控制整个循环,上下遍历维持闭区间,左右遍历维持开区间(原因为四角重复), 注意两点

  1. 循环跳出条件
  2. 遍历下、左遍历不一定存在,需要额外判断是否遍历过
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
}

关于我

一个希望友友们能提出建议的代码下毒糕手