日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > 劍指offer 面試題20―順時(shí)針打印矩陣

劍指offer 面試題20―順時(shí)針打印矩陣

來源:程序員人生   發(fā)布時(shí)間:2015-05-11 09:21:54 閱讀次數(shù):2548次

題目:

輸入1個(gè)矩陣,依照從外向里以順時(shí)針的順序順次打印出每個(gè)數(shù)字。
例如:如果輸入以下矩陣:

1             2             3             4
5             6             7             8
9             10            11             12
13            14            15             16
則順次打印出數(shù)字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6,7, 11, 10


基本思想:

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

      由于endXendY可以根據(jù)startXstartYcolumnsrows來求得,因此此時(shí)我們只需要引入startXstartY兩個(gè)變量。我們可以想象有1個(gè)循環(huán),在每次循環(huán)里我們從(startX, startY)動(dòng)身依照順時(shí)針打印數(shù)字。

接著我們分析這個(gè)循環(huán)結(jié)束的條件。對1個(gè)5×5的矩陣而言,最后1圈只有1個(gè)數(shù)字,對應(yīng)的坐標(biāo)為(2, 2)。我們發(fā)現(xiàn)5 > 2 * 2。對1個(gè)6×6的矩陣而言,最后1圈有4個(gè)數(shù)字,對應(yīng)的坐標(biāo)依然為(2, 2)。我們發(fā)現(xiàn)6 > 2 * 2仍然成立。因而我們可以得出,讓循環(huán)繼續(xù)的條件是columns > startX * 2 && rows > startY * 2

     接下來我們分析如何依照順時(shí)針的順序打印1圈的數(shù)字。猶如在圖中標(biāo)注的那樣,我們可以分4步來打印:第1步是從左到右打印1行(上圖中黃色區(qū)域),第2步是從上到下打印1列(上圖中綠色區(qū)域),第3步從右到左打印1行(上圖中藍(lán)色區(qū)域),最后1步是從下到上打印1列(上圖中紫色區(qū)域)。也就是我們把打印1圈數(shù)字這個(gè)問題,分解成4個(gè)子問題。

      值得注意的是,最后1圈可能退化成只有1行、只有1列、乃至只有1個(gè)數(shù)字,因此打印這樣的1圈就不需要4步了。


#include <iostream> using namespace std; void PrintMatrixIncircle(int nArr[][4], int rows, int columns, int nStart) { int nEndX = columns - 1 -nStart; int nEndY = rows - 1 -nStart; //從左到右打印1行 for (int i=nStart; i<=nEndX; i++) { cout << nArr[nStart][i] << " "; } //從上到下打印1列 if (nEndY > nStart) { for (int j=nStart+1; j<=nEndY; j++) { cout << nArr[j][nEndX] << " "; } } //從右到左打印1行 if (nEndY > nStart && nEndX > nStart) { for (int t=nEndX⑴; t>=nStart; t--) { cout << nArr[nEndY][t] << " "; } } //從下到上打印1列 if (nEndY ⑴ > nStart && nEndX > nStart) { for (int n=nEndY⑴; n>=nStart+1; n--) { cout << nArr[n][nStart] << " "; } } } //順時(shí)針打印矩陣,行數(shù)為rows,列數(shù)為columns void PrintMatrixClockWisely(int nArr[][4], int rows, int columns) { if (nArr == NULL || rows <= 0 || columns <= 0) return ; int nStart = 0; while (rows>(nStart*2) && columns>(nStart*2)) { PrintMatrixIncircle(nArr, rows, columns, nStart); nStart++; } } int main() { int nMatrix[4][4] = { {1,2,3,4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; PrintMatrixClockWisely(nMatrix, 4, 4); cout << endl; return 0; }


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 午夜免费网站 | 亚洲乱码国产乱码精品精98午夜 | 久久久精品区 | 亚洲xxxx视频 | 欧美一级黄色网 | 国产精品一区二区免费 | 日韩精品电影 | 91短视频黄| 日产精品久久久久久久性色 | 一级性黄色片 | 国产福利久久 | 亚洲成人精品一区二区三区 | 少妇精品久久久一区二区三区 | 国产h片在线观看 | 亚洲欧美视频一区 | 国产嫩草影院 | 天堂av网在线 | 亚洲清色 | 美女激情av | 国产福利视频导航 | 欧美aa| 日韩欧美国产综合 | 成人二区 | 久久精品国产久精国产 | 亚州成人 | 国产精品国产三级国产aⅴ入口 | 美女又爽又黄免费视频 | 国产精品福利在线 | 亚洲综合无码一区二区 | 色婷婷综合成人 | 国产a级大片 | 一区二区三区欧美 | 黄版视频在线观看 | 99精品免费久久久久久久久 | 欧美精品福利在线 | 免费看成人av | 国产午夜精品久久久久久免费视 | 波多野结衣精品在线 | 久久91精品国产91久久跳 | 久久免费影院 | 亚洲综合伊人 |