輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。
示例 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,10,9,5,6,7]
演算法流程:
空值處理:當 matrix 為空時,直接返回空列表 即可。
初始化:矩陣 左、右、上、下 四個邊界 l , r , t , b ,用於列印的結果列表 res 。
迴圈列印:「從左向右、從上向下、從右向左、從下向上」 四個方向迴圈,每個方向列印中做以下三件事 (各方向的具體資訊見下表) ;
根據邊界列印,即將元素按順序新增至列表 res 尾部;
邊界向內收縮 11 (代表已被列印);
判斷是否列印完畢(邊界是否相遇),若列印完畢則跳出。返回值: 返回 res 即可。
列印方向
根據邊界列印
邊界向內收縮
是否列印完畢
從左向右
左邊界l ,右邊界 r
上邊界 t 加 1
是否 t > b
從上向下
上邊界 t ,下邊界b
右邊界 r 減 1
是否 l > r
從右向左
右邊界 r ,左邊界l
下邊界 b 減 1
是否 t > b
從下向上
下邊界 b ,上邊界t
左邊界 l 加 1
是否 l > r
1public
int spiralorder(int
matrix)
5int left = 0,right=matrix[0].length-1,top=0,bottom=matrix.length-1,count=0;
6int array = new
int[(right+1)*(bottom+1)];
7while(true)12
if(++top>bottom) break;13
//從上到下 ,right--
14for(int i=top;i<=bottom;i++)
17if(left>--right) break;18
19//
從右到左,bottom--
20for(int i=right;i>=left;i--)
23if(top>--bottom)break;24
25//
從下到上,left++
26for(int i=bottom;i>=top;i--)
29if(++left>right)break;30
}31return
array;
32 }
順時針列印矩陣
輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 1 2 3 45 6 7 89 10 11 1213 14 15 16則依次列印出數字 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。這個題目 寫的並不好感覺,好多if看著就煩,就是...
順時針列印矩陣
題目 給定乙個矩陣,從外向內順時針列印矩陣中的每乙個數字。例如 給定矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 輸出應該為 分析 這道題的意思非常直觀,給人的感覺也是so easy,然而實際去做的時候會發現,如果結構劃分的不好,會出現很多的迴圈,而且包括對各種...
順時針列印矩陣
from 題目 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次列印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。網上聽說聽到包括autod...