54. 螺旋矩阵

86 阅读1分钟

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

解法:
一层一层的剥

func spiralOrder(matrix [][]int) []int {
    
    up, down := 0, len(matrix) - 1
    left, right := 0, len(matrix[0]) - 1
    ans := make([]int, len(matrix) * len(matrix[0]) )
    index := 0
    for left <= right && up <= down {
        for column := left; column <= right; column ++ {
            ans[index] = matrix[up][column]
            index ++
        }
        for row := up + 1; row <= down; row ++ {
            ans[index] = matrix[row][right]
            index ++            
        }
        // up和right已经遍历过了,矩形少了上面和右边的边,所以等号条件不成立了
        if left < right && up < down {
            for column := right - 1; column >= left; column -- {
                ans[index] = matrix[down][column]
                index ++
            }
            for row := down - 1; up < row; row -- {
                ans[index] = matrix[row][left]
                index ++            
            }            
        }
        // 去掉四条边
        up ++
        down --
        left ++
        right --
    }

    return ans
}