Skip to content

Latest commit

 

History

History
54 lines (49 loc) · 1.25 KB

29. 顺时针打印矩阵.md

File metadata and controls

54 lines (49 loc) · 1.25 KB

解题思路

1. 遍历一段削减一段

定义四个变量分别代表矩阵当前的范围:up、down、left、right 按上、下、左、右段遍历,遍历一段,缩小一段的范围,同时判断范围是否越界

func spiralOrder(matrix [][]int) (ans []int) {
    if len(matrix) == 0 || len(matrix[0]) == 0 {
        return
    }
    t, b, l, r := 0, len(matrix)-1, 0, len(matrix[0])-1
    for {
        // 从左到右,遍历最上面一行
        for i := l; i <= r; i++ {
            ans = append(ans, matrix[t][i])
        }
        t++
        if t > b {
            return
        }
        // 从上到下,遍历最右边一列
        for j := t; j <= b; j++ {
            ans = append(ans, matrix[j][r])
        }
        r--
        if l > r {
            return
        }
        // 从右到左,遍历最下面一行
        for i := r; i >= l; i-- {
            ans = append(ans, matrix[b][i])
        }
        b--
        if t > b {
            return
        }
        // 从下到上,遍历最左边一列
        for j := b; j >= t; j-- {
            ans = append(ans, matrix[j][l])
        }
        l++
        if l > r {
            return
        }
    }
    return
}