LeetCode 實現矩陣螺旋輸出

2021-10-11 09:11:00 字數 2092 閱讀 1731

位元組、美團真題

給定乙個m*n的矩陣,請按順時針螺旋順序,返回矩陣中所有的元素.

示例 1:

input:matrix=[[1,2,3],

[4,5,6],

[7,8,9]]

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

示例 2:

input:matrix=[[1,2,3,4],

[5,6,7,8],

[9,10,11,12]]

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

解題思路:

方法1

模擬遍歷 

首先需要定義行和列的方向陣列,因為當遍歷到矩陣的邊界時需要換方向.同時遍歷

到已經遍歷過的元素也需要換方向.

行方向:

dr=(右、下、左、上)

列方向:

dc=(右、下、左、上)

此外,需要設定乙個bool陣列,進行記錄已經遍歷過的元素座標(row,col),以便

進行邊界判斷.

其實還有更加便捷的方式設定方向:d=,只需要用乙個矩陣

方法2

按層遍歷

把這個矩陣像剝洋蔥的一層一層的剝開,從最外層一直到最裡層,

比如示例1的,

第一層的上面邊:1,2,3,其中列座標col從mincol到maxcol;

第一層的右面邊:6,9,其中行座標row從minrow+1到maxrow;

第一層的下面邊:8,7,其中列座標col從maxcol-1到mincol;

第一層的左面邊:4,其中行座標row從maxrow-1到minrow+1;

第二層的上面邊:5,其中列座標col從mincol到maxcol

這個理解比較簡單,需要注意的點是對當前層是否有4條邊的判斷:

minrowc++語言實現

#include #include using namespace std;

class solution;

int row=matrix.size(),col=matrix[0].size();

vectorans;

/*行方向*/

vectordr=;

/*列方向*/

vectordc=;

int r=0,c=0,k=0;

/*記錄是否訪問過*/

vector> flag(row,vector(col));

for(auto i=0;i=0&&nr=0&&nc> matrix=,,};

vectorans=solution().spiralorder(matrix);

cout<<"[ ";

for(auto& num:ans)

cout<go語言實現

package main

import "fmt"

func spiralorder(matrix int)(ans int)

/*當前層的行、列的最小、最大座標*/

minrow,maxrow,mincol,maxcol:=0,len(matrix)-1,0,len(matrix[0])-1

for ;minrow<=maxrow&&mincol<=maxcol;

/*遍歷當前層右面邊的所有元素座標,列座標不變,行座標從minrow+1到maxrow*/

for row:=minrow+1;row<=maxrow;row++

/*滿足4條邊*/

if minrow=mincol;col--

/*遍歷當前層左面邊的所有元素座標,列座標不變,行左標從maxrow-1到minrow+1*/

for row:=maxrow-1;row>=minrow+1;row--

} minrow++

maxrow--

mincol++

maxcol--

} return

}func main(),,}

fmt.println(spiralorder(matrix))

}

螺旋矩陣 leetcode

螺旋矩陣 給定乙個包含 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,...

Leetcode 螺旋矩陣

題目描述 給定乙個包含 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,...

LeetCode 螺旋矩陣

題目 給你乙個 m 行 n 列的矩陣 matrix 請按照 順時針螺旋順序 返回矩陣中的所有元素。輸入 matrix 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 思路 使用left,right,up,down四個邊界值來順時針遍歷矩陣,每迴圈一次邊界值往內縮1,即l...