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