leetcode 54 螺旋矩陣(Medium)

2021-10-06 20:55:47 字數 2687 閱讀 6701

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。

示例 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...