目录
螺旋矩阵
访问量:422

一、简介

给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。

输入:

[[1,2,3],[4,5,6],[7,8,9]]

返回值:

[1,2,3,6,9,8,7,4,5]

二、实现

思路:关键是定义上下和左右的边界值,实现如下:

/**
 *
 * @param matrix int整型二维数组
 * @return int整型一维数组
 */
func spiralOrder( matrix [][]int ) []int {
   // write code here
   if len(matrix) == 0 {
      return nil
   }

   rowBegin := 0
   rowEnd := len(matrix) - 1

   colBegin := 0
   colEnd := len(matrix[0]) -1

   rs := make([]int, 0)

   for rowBegin <= rowEnd || colBegin <= colEnd {
      // 往左遍历
      if rowBegin <= rowEnd {
         for i:= colBegin; i<= colEnd; i++ {
            rs = append(rs, matrix[rowBegin][i])
         }
      }
      rowBegin = rowBegin +1 // 行的起点,要往下移动

      // 从上往下遍历
      if colBegin <= colEnd {
         for i:=rowBegin; i <=rowEnd ; i++ {
            rs = append(rs, matrix[i][colEnd])
         }
      }
      colEnd = colEnd -1 // 列的终点,要往 前移动

      // 从后往前
      if rowBegin <= rowEnd {
         for i:= colEnd; i >=colBegin; i -- {
            rs = append(rs, matrix[rowEnd][i])
         }
      }
      rowEnd = rowEnd - 1 //  行的终点,要往上移动

      // 从下往上
      if colBegin <= colEnd {
         for i:= rowEnd; i>=rowBegin; i-- {
            rs = append(rs, matrix[i][colBegin])
         }
      }
      colBegin = colBegin + 1
   }

   return rs
}