题意:
解题思路:
思路:1.从左到右,从上到下,从右到左,从下到上依次遍历每一个数2.时间复杂度:O(n),每个元素遍历一次
PHP代码实现:
class Solution { /** * @param Integer[][] $matrix * @return Integer[] */ function spiralOrder($matrix) { $ret = []; if (count($matrix) == 0 || count($matrix[0]) == 0) return $ret; $top = 0; $bottom = count($matrix) - 1; $left = 0; $right = count($matrix[0]) - 1; while (true) { //from left to right for ($i = $left; $i <= $right; $i++) { array_push($ret, $matrix[$top][$i]); } $top++; if ($left > $right || $top > $bottom) break; //from top to bottom for ($i = $top; $i <= $bottom; $i++) { array_push($ret, $matrix[$i][$right]); } $right--; if ($left > $right || $top > $bottom) break; //from right to left for ($i = $right; $i >= $left; $i--) { array_push($ret, $matrix[$bottom][$i]); } $bottom--; if ($left > $right || $top > $bottom) break; //from bottom to top for ($i = $bottom; $i >= $top; $i--) { array_push($ret, $matrix[$i][$left]); } $left++; if ($left > $right || $top > $bottom) break; } return $ret; }}
GO代码实现:
func spiralOrder(matrix [][]int) []int { if len(matrix) == 0 { return nil } step := 0 size := len(matrix) * len(matrix[0]) top, bottom, left, right := 0, len(matrix) - 1, 0, len(matrix[0]) - 1 result := make([]int, size) for step < size { for i := left; i <= right && step < size; i++ { result[step] = matrix[top][i] step++ } top++ for i := top; i <= bottom && step < size; i++ { result[step] = matrix[i][right] step++ } right-- for i := right; i >= left && step < size; i-- { result[step] = matrix[bottom][i] step++ } bottom-- for i := bottom; i >= top && step < size; i-- { result[step] = matrix[i][left] step++ } left++ } return result}