leetcode54螺旋矩阵

leetcode54 Spiral Matrix

Posted by BY on August 26, 2019

前言

猛起更新。

正文

问题来源

本问题来自leetcode上的54题。

问题描述

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]

示例 2:

输入:
[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]

分析:

func spiralOrder(matrix [][]int) []int {
    if len(matrix) == 0 || len(matrix[0]) == 0 {
        return nil
    }
    ans := make([]int, len(matrix)*len(matrix[0]))
    index := 0
    //ans[0] = matrix[0][0]
    //index++
    x1, x2, y1, y2 := 0,  len(matrix)-1, 0, len(matrix[0])-1
    for x1 <= x2 && y1 <= y2 {
        for i := y1; i <= y2; i++ {
            ans[index] = matrix[x1][i]
            index++
        }
        for i := x1+1; i <= x2; i++ {
            ans[index] = matrix[i][y2]
            index++
        }
        if x1 < x2 && y1 < y2 {
            for i := y2-1; i >= y1; i-- {
                ans[index] = matrix[x2][i]
                index++
            }
            for i := x2-1; i > x1; i-- {
                ans[index] = matrix[i][y1]
                index++
            }
        }
        x1++
        x2--
        y1++
        y2--
    }
    
    return ans
}

总结:

勤思考。

结语

不管怎么样好好加油。