数据结构与算法--解决问题的方法-顺时针打印矩阵
順時針打印矩陣
-
題目輸入一個矩陣,按照從外向里順時針的順序依次打印每一個數字。例如下案例:
-
如上圖矩陣,順時針打印:1,2,3,4,8,12,16,15,14,13,9,5,6,7,1,10
-
以上問題看起來比較復雜,但是又沒有涉及到復雜的數據結構,因為我們矩陣的實現需要用到二維數組,必然涉及到邊界值的判斷,不限行的話,非常容易數組越界,然后按循環打印又涉及到循環的嵌套。因此我們先用圖分析整個打印過程
-
當問題復雜的時候我們可以用圖片拆解問題,將復雜問題拆成局部小問題分析,如下,我們用一個循環來打印矩陣,每次分析其中的一個圈。
-
如上第一圈的遍歷,我們假設行數是row,列是col。打印的時候最左上角的坐標應該都是行列都是相同的,例如(0,0),(1,1),(2,2)等。因此我們開始的起點標識為start,那么坐標就是(start,start)
-
上圖中是一個44 的矩陣,最后一圈明顯有4個數字起始坐標 (1,1),4> 11,但是對于一個55 的矩陣來說,最后一圈就只有一個坐標(2,2),5> 22,對于66 的矩陣最后一圈還是4個,起始坐標還是(2,2),6> 22。我們可以得出,每次的起點位置都是滿足 col > startX 2 并且 row > startY2。可以將這個當做循環結束的條件
-
經如上分析,得出以下實現:
-
接下來實現打印的邏輯。如上圖中分析,我們打印可以分為四個部分,:上,右,下,左。每一步我們都更具起始和終止的xy,坐標來循環,那么接下來我們只需要確認四個角的打印開始位置就行。
-
不過應該注意的是,最后一圈不一定是一個圈,或者一個點,可能是一個直線,因為我們以上的案例都是四方的矩陣,還有長方的,例如5*6 的矩陣
-
如上特殊案例中,我們每次打印之前需要判斷,我們的起始坐標(start, start)應該比(endx,endy)都要小
-
如上分析,我們有如下實現:
- 這種找規律的題目,本來就比較復雜,需要快速的找到規律并給出實現方案是關鍵,但問題比較抽象的時候,可以用圖形來解決。
上一篇:數據結構與算法–解決問題的方法- 二叉樹的的鏡像
下一篇:數據結構與算法–舉例分析法- 棧的壓入彈出序列
總結
以上是生活随笔為你收集整理的数据结构与算法--解决问题的方法-顺时针打印矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抖音怎么拼接多个视频 如何把图片和视频拼
- 下一篇: iphone14有没有指纹解锁