輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。
示例 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]
限制:0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
class
solution
}
迴圈解法,按層遍歷,各種邊界條件需要考慮,導致**雜亂無章。不推薦使用。
class
solution;}
int linelen = matrix[0]
.length;
int[
] result =
newint
[linewidth * linelen]
;int count =0;
int layercount =
(math.
min(linelen, linewidth)+1
)/2;
for(
int i =
0; i < layercount ; i++
)break;}
else
if(linelen ==1)
break;}
for(
int j = i ; j < i + linelen ; j++
)for
(int j = i +
1; j < i + linewidth ; j++
)for
(int j = i + linelen -
2; j > i ; j--
)for
(int j = i + linewidth -
1; j > i ; j--
) linelen -=2;
linewidth -=2;
}return result;
}}
時間複雜度:o(v
)o(v)
o(v)
。陣列中的每個元素操作了一次。
空間複雜度:o(1
)o(1)
o(1)
。除了答案集空間開銷為o(v
)o(v)
o(v)
,其餘輔助空間都為常數級。這裡答案集不算進去是因為答案集的元素沒有呼叫關係,僅僅作為最後返回的結果。
遞迴解法,遞迴引數需要乙個方向引數,代表這個元素接下來往哪走。
假設當前方向為右,那麼判斷右邊元素是否超界、是否被訪問過。如果沒有超界且沒有被訪問過,則遞迴轉移到右邊的節點。
如果超界了,或者以及訪問過,那麼就得改變方向了,繼續判斷是否能向下轉彎。
雖然**量類似,但遞迴思路更清晰。
class
solution;}
this
.matrix = matrix;
this
.len = matrix[0]
.length;
this
.width = matrix.length;
this
.result =
newint
[len * width]
;this
.checked =
newint
[width]
[len]
;// 起始點為[0,0],向右走
circle(0
,0,1
);return result;
}// direction為方向
// 1 -> 右,2 -> 下,3 -> 左,4 -> 上
private
void
circle
(int x,
int y,
int direction)
else
if(x +
1< width && checked[x +1]
[y]==0)
}else
if(direction ==2)
else
if(y -
1>=
0&& checked[x]
[y -1]
==0)}
else
if(direction ==3)
else
if(x -
1>=
0&& checked[x -1]
[y]==0)
}else
else
if(y +
1< len && checked[x]
[y +1]
==0)}
}}
時間複雜度:o(v
)o(v)
o(v)
。陣列中的每個元素操作了一次。
空間複雜度:o(v
)o(v)
o(v)
。checked
陣列開銷為o(v
)o(v)
o(v)
,其餘輔助空間都為常數級。
LeetCode 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,12,11...
leetcode54 螺旋矩陣
給定乙個包含 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...
leetcode 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 思路是 方向陣列 邊界調整 如下 class solution void matain int x,int...