php筆試演算法題 順時針列印矩陣座標 蛇形演算法

2022-07-17 03:36:11 字數 1709 閱讀 9223

這幾天參加面試,本來筆試比較簡單,但是在面試的時候,技術面試官說讓我現場寫乙個演算法,順時針列印矩陣的座標,如圖所示

順序為,0,1,2,3,4,9,14,19,24,23,22,21,20,15,10,5,6,7,8,13,18,17,16,11,12

假設 0的座標為(0,0),1的座標為(0,1),5的座標為(1,0)其他以此類推。

題目是列印出來順序的座標。

當場這道題我沒寫出來,後來面試官讓我回家寫,然後發到他的郵箱。回到家網上找了一下,也沒有好的解決方案,只好自己寫了。

總體思路採用乙個大迴圈控制,迴圈條件當前的最大縱座標不小於最小縱座標,並且當前小橫座標不小於最大橫座標時,迴圈終止,然後再按照上右下左的順序分四個小迴圈遍歷。

第一步:實現等高等寬的矩陣(x=y)的座標遍歷。

第二步:採用記錄標誌的方式改進,實現x!=y或x=y矩陣的遍歷。

第一步**實現:

1/**

2* [printxy 順時針遍歷等高等寬矩陣座標]

3* @param integer $n [矩陣寬高]

4* @return string [座標字串]5*/

6function printxy($n=1) 724

$mintopx++;

2526

//當前右邊一行

27for($i = $mintopx; $i

<= $maxbottomx; $i++)

30$maxrighty--;

3132

//當前底部一行

33for($j = $maxrighty; $j >= $minlefty; $j--)

36$maxbottomx--;

3738

//當前左邊一行

39for($i = $maxbottomx; $i >= $mintopx; $i--)

42$minlefty++;43}

44return

$sortxy;45

}

第二步的實現**:

1/**

2* [printxy2 順時針遍歷矩陣座標]

3* @param integer $x [矩陣寬度]

4* @param integer $y [矩陣高度]

5* @return string [座標字串]6*/

7function printxy2($x=1,$y=1) 829

}30$mintopx++;

3132

//當前右邊一行

33for($i = $mintopx; $i

<= $maxbottomx; $i++) 38}

39$maxrighty--;

4041

//當前底部一行

42for($j = $maxrighty; $j >= $minlefty; $j--) 47}

48$maxbottomx--;

4950

//當前左邊一行

51for($i = $maxbottomx; $i >= $mintopx; $i--) 57}

58$minlefty++;59}

60return

$sortxy

;61 }

請大家指正。

順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 1 2 3 45 6 7 89 10 11 1213 14 15 16則依次列印出數字 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。這個題目 寫的並不好感覺,好多if看著就煩,就是...

順時針列印矩陣

題目 給定乙個矩陣,從外向內順時針列印矩陣中的每乙個數字。例如 給定矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 輸出應該為 分析 這道題的意思非常直觀,給人的感覺也是so easy,然而實際去做的時候會發現,如果結構劃分的不好,會出現很多的迴圈,而且包括對各種...

順時針列印矩陣

from 題目 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 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。網上聽說聽到包括autod...