程序員面試題精選100題(51)-順時針打印矩陣[算法]

時間:2019-09-22 編輯:范文亭

題目:輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數字。

例如:如果輸入如下矩陣:

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

分析:第一次看到這個題目的時候,覺得這個題目很簡單,完全不需要用到數據結構或者算法的知識,因此沒有興趣做這道題。后來聽到包括AutodeskEMC在內的多家公司在面試或者筆試里采用過這道題,于是想這么多家公司用它來檢驗一個程序員的編程功底總是有原因的,于是決定自己寫一遍試一下。真正寫一遍才發現,要完整寫出這道題的代碼,還真不是件容易的事情。

                解決這道題的難度在于代碼中會包含很多個循環,而且還有多個邊界條件需要判斷。如果在把問題考慮得很清楚之前就開始寫代碼,不可避免地會越寫越混亂。因此解決這個問題的關鍵,在于先要形成清晰的思路,并把復雜的問題分解成若干個簡單的問題。下面分享我分析這個問題的過程。

                通常當我們遇到一個復雜的問題的時候,我們可以用圖形幫助我們思考。由于我們是以從外圈到內圈的順序依次打印,我們在矩陣中標注一圈作為我們分析的目標。在下圖中,我們設矩陣的寬度為columns,而其高度為rows。我們我們選取左上角坐標為(startX, startY),右下角坐標為(endX, endY)的一個圈來分析。

 

 

 

 

 

 

 

startX, startY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

endX, endY

 

 

 

 

 

 

 

本文已影響
相關文章
大亨pk10计划苹果版