54 螺旋矩陣

2021-09-12 02:31:33 字數 1853 閱讀 8307

給定乙個包含 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,12,11,10,9,5,6,7]

思路:和59螺旋矩陣ii一樣,乙個是把其中的數字輸出出來;另乙個是把n²個數存放到正方形之中。

弄清楚正方形的四個邊界在旋轉填充的時候的變化。

一開始在左上角的初始位置,從左-->右的變化,此時橫座標不變,即為up,縱座標從左 -->右,

for(int j = left;j <= right;j++)

vec[up][j] = num++;

在變換完「左-->右」之後,下一次迴圈如圖順時針的變換,此時最上面的一行,應該向下走了一行,即up = up+1;判斷終止的條件就是上界up > 下界down了。

if(++up > down) break;
其它三個方向同理,注意一開始寫的時候要考慮什麼時候跳出迴圈 :上界在變換之後大於下界(左界在變換之後大於有界...同理)。

**:做題的時候錯的地方

1、第乙個點,我想用m n 來判斷輸入的二維陣列是不是空,來輸出乙個空陣列,但是如果matrix是空,那麼第乙個**matrix[0].size()就發生了越界,錯了幾次了。。

2、第二點,我一開始覺得從left~right的迴圈,會和up~down有乙個元素的重複,所以就想從left~right-1(如圖一);後來發現這樣寫不行,因為你有乙個終止條件的判斷:++up > down ,此時你的up已經變成下一層了,就會出錯。然後我自己想了想從left~rigjt的變換之後,up++變成下一層,所以就不會有元素的重複,元素儲存的過程(如圖二)

3、 跳出迴圈的條件:如第一層從左向右變化,變化完了之後,第二次迴圈up已經向下了一層,肯定是不能上層大於下層的,一開始還弄混了。。。

4、上次已經做過59題了...這次居然還想搞個變數來控制圈。。。我是佛了~看來還是要認真的總結啊!

class solution 

if(++up>down) break;

//if(++left > right) break;

for(int i = up ;i<= down ;i++)

if(--right < left) break;

for(int i = right;i>= left;i--)

if(--down < up) break;

for(int i = down ;i >= up;i--)

if(++left >right ) break;

}return res;}};

54 螺旋矩陣

給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。輸入 1,2,3 4,5,6 7,8,9 輸出 1 2,3 6,9 8,7 4,5 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1 2,3 4,8 12,11 10,9 5,6 ...

54 螺旋矩陣

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

54 螺旋矩陣

給你乙個 m 行 n 列的矩陣 matrix 請按照 順時針螺旋順序 返回矩陣中的所有元素。示例一 輸入 matrix 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例二 輸入 matrix 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4...