手で裂いた leecode python:59. スパイラル行列 II

免責事項: 個人的な学習目的、限定された容量、参照のみを目的としています。

ネギ 59: スパイラル マトリックス 

1 つ目は、アイデアです。

最初の反応は、for ループを使用して解決する暴力的な解決策です。

試してみるとめまいがする

情報を確認した後は、基本的にコードを使いこなす能力を調べることになります。

時計回りに行列を描画するプロセスをシミュレートします。

1. 左から右へのアップリンク

2. 右列を上から下へ

3. 下流側右から左へ

4. 左の列を下から上に向かって進みます。

最初はN=3の例で囲みました。N=5 の例を自分で描くことをお勧めします。これは理解しやすいです----------ここで、時計回りに描画するたびに、初期点 x、y が +1 される必要があることを強調します。 、この操作で初期点を変更する必要があります。

この理解をここで紹介します。

これは、コーナーに遭遇するたびに、コーナーの点が新しい側に描画されることを意味します。

翻訳的には、これは左閉右開ルール[,)

 コード

#螺旋矩阵
#
def generate_matrix(n):
    nums = [[0] * n for _ in range(n)]
    startx, starty =0, 0                          #起始点
    loop, mid = n//2, n//2                        #迭代次数,n为奇数时,矩阵的中心点
    count = 1                                     #计数

    for offset in range(1, loop + 1):             #每循环一层偏移量加1,偏移量从1开始
        for i in range(starty, n - offset):       #从左至右,左闭右开
            nums[startx][i] = count
            count += 1
        for i in range(startx, n - offset):       #从上至下
            nums[i][n - offset] = count
            count += 1 
        for i in range(n - offset, starty, -1):   #从右至左
            nums[n - offset][i] = count
            count += 1
        for i in range(n - offset, startx, -1):   #从下至上
            nums[i][starty] = count
            count += 1
        startx += 1
        starty += 1
    
    if n % 2 !=0:                                 #n为奇数时,填充中心点
        nums[mid][mid] = count
    return nums

裏面に次のように書きます。

私が面接官だったら、反時計回りに印刷する場合はどうなるかと尋ねます。自分の考えについて話してください。

おすすめ

転載: blog.csdn.net/qq_33083551/article/details/125747680