螺旋矩陣 題解

2021-07-09 14:15:01 字數 986 閱讀 2084

螺旋矩陣

【問題描述】

乙個n行n列的螺旋矩陣可由如下方法生成:

從矩陣的左上角(第1行第1列)出發,初始時向右移動;

如果前方是未曾經過的格仔, 則繼續前進,否則右轉;

重複上述操作直至經過矩陣中所有格仔。根據經過順序,在格仔中依次填入1, 2, 3, ... , n2,便構成了乙個螺旋矩陣。

下圖是乙個n = 4 時的螺旋矩陣。 

現給出矩陣大小n以及i和j,請你求出該矩陣中第i行第j列的數是多少。

【題解】

首先,本題有兩種思路。

1.老老實實填陣列。(此方法簡單易懂,但當矩陣過大時,就會出現陣列開不夠大,或long long也不夠的情況)

2. 用演算法找規律,但規律不是一般的難找。我就簡單說說我找到的規律。12

341213145

1116156

10987

1243

首先對比兩表,你就會發現下表就是上表中間四格每個減去12,正好就是外圈12個數中最大的;

而12就是外圈邊長的4倍減4;

於是,就成了這樣12

34121

25113

46109

87紅色是內圈,黑色是外圈

紅色基數為12,黑色基數為0

同時,每一圈最上方的一行就是i的值。

最右方的一列就是n(i)+j-1的值。

最下方的一行就是4n-i-j-1的值。

最左方的一列就是4n-i-j-1的值。

(一定要記得加上外圈基數哦!)

【參考程式】

c語言

#includeint i=2,j=3,n=3;

void luo(int n1)

int main()

螺旋矩陣題解

螺旋矩陣 matrix.cpp 問題描述 乙個n行n列的螺旋矩陣可由如下方法生成 從矩陣的左上角 第1行第1列 出發,初始時向右移動 如果前方是未曾經過的格仔,則繼續前進,否則右轉 重複上述操作直至經過矩陣中所有格仔。根據經過順序,在格仔中依次填入1,2,3,n2,便構成了乙個螺旋矩陣。下圖是乙個n...

LeetCode題解 59 螺旋矩陣 II

給定乙個正整數 n,生成乙個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。示例 輸入 3 輸出 1,2,3 8,9,4 7,6,5 嘗試過用數學公式推導 row col 的值,沒推出來 只能用 真 螺旋 方法生成了,最外層迴圈次數是固定的,n 2次,且生成數也是從1 到 n ...

螺旋方針(螺旋矩陣)

螺旋方陣 time limit 1000ms memory limit 65536kb problem description 的螺旋方陣當n 5和n 3時分別是如下的形式 請給出乙個程式,對於任意的輸入 0 11 輸出按照上面規律所獲得的 的螺旋方陣。input 輸入第一行為整數 0 10 代表有...