第一步:問題分析
遍歷問題,還沒有想到是什麼資料結構,就想著按照思路去列印。
第二步:闡述你的思路,比如打算用什麼演算法或者資料結構去解決這個問題,通過描述看是否行得通
自己的思路就是模擬這個列印的過程,先按行從左到右輸出,然後從上到下,再從右到左,再從下到上,順時針迴圈,直到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...