leecode面試題29 順時針旋轉列印矩陣

2021-10-06 21:06:23 字數 1407 閱讀 8450

第一步:問題分析

遍歷問題,還沒有想到是什麼資料結構,就想著按照思路去列印。

第二步:闡述你的思路,比如打算用什麼演算法或者資料結構去解決這個問題,通過描述看是否行得通

自己的思路就是模擬這個列印的過程,先按行從左到右輸出,然後從上到下,再從右到左,再從下到上,順時針迴圈,直到m*n個數全部被列印出來未知,用了乙個while迴圈。

內部有設定統計每回要迴圈的次數的裝置:a,b,c,d

要注意先對特殊值進行處理,比如這個矩陣是空的,比如矩陣長度小於0了的情況。

下來while內部的迴圈就按照列印思路來寫,改了不少遍才出的結果,要不斷除錯找出問題。在列印的時候,初始下標與結束下標都是在不斷變化的。

開始寫**

我自己寫的多多少少還是有些問題,實現了3*3的輸出,但沒實現4*4的輸出,還有就是特殊處理。

line 923: char 9: runtime error: reference binding to null pointer of type 'std::vector原因是因為沒有做特殊處理,對於空指標沒有特殊處理導致錯誤。ok,以後要多注意,不然就是重大bug。

最終參照了官方給的題解才有了如下**:

#include

#include

using

namespace std;

vector<

int>

spiralorder

(vectorint>>

& matrix)

if(flag<=0)

break

;//從上到下

for(

int i=a+

1; i<=c; i++)if

(flag<=0)

break;if

(a < c && d < b)

if(flag<=0)

break

;//從下往上

for(

int i=c;i>a;i--)if

(flag<=0)

break;}

d = d+1;

a = a+1;

b = b-1;

c = c-1;

}return r;

}int

main()

; vectorint>>

array(3

);for(

int i=

0;isize()

;i++

) vector<

int> re=

spiralorder

(array)

;for

(int i=

0;i<

9;i++

)return0;

}

面試題29 順時針列印矩陣

輸入乙個矩陣,從外到裡以順時針順序依次列印 思路 將其看作一圈一圈列印 開始 start,start 座標,0,0 1,1 2,2 終止列印一圈的條件 cols startx2,rows starty2 如何列印一圈?從左到右 總需要 從上到下 起始行號 終止行號 從右到左 圈內至少兩行兩列 從下到...

面試題29 順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。這裡沒有涉及複雜的資料結構或者演算法,但是需要寫多個迴圈,需要判斷多個邊界條件。需要注意的是,最後一圈可能退化成只有一行 只有一列,甚至只有乙個數字。分析一圈 第一步總是需要的,因為至少有一步。如果只有一行,就不需要第二步了。需要第二步的...

面試題29 順時針列印矩陣

題目描述 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。示例 1 輸入 matrix 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 matrix 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11...