Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで行列要素をスパイラル順に印刷するプログラム


2Dマトリックスマットがあるとします。行列要素をらせん状に印刷する必要があります。最初に最初の行(mat [0、0])から始めて、コンテンツ全体を印刷し、最後の列に続いて印刷し、最後の行というように、要素をらせん状に印刷します。

したがって、入力が次のような場合

7
10
9
2
9
1
6
2
3
9
1
4
2
7
5
9
9
11

その場合、出力は[7、10、9、1、3、4、5、11、9、9、2、9、6、2、9、2、1、7]

になります。

これを解決するには、次の手順に従います。

  • d:=0
  • 上:=0、下:=マトリックスの行数– 1、左:=0、右:=マトリックスの列数-1
  • c:=0
  • res:=新しいリスト
  • 方向:=0
  • 上<=下、左<=右、実行
    • 方向が0と同じ場合、
      • 左から右+1の範囲のiの場合、実行します
        • matrix [top、i]をresに挿入
      • top:=top + 1
    • 方向が1と同じ場合、
      • 上から下までの範囲のiの場合+1、実行
        • matrix [i、right]をresに挿入します
      • right:=right-1
    • 方向が2と同じ場合、
      • 右から左の範囲のiの場合-1、1ずつ減らします。
        • matrix [down、i]をresに挿入します
      • ダウン:=ダウン-1
    • 方向が3と同じ場合、
      • iの場合、上から1までの範囲で、1ずつ減らします。
        • matrix [i、left]をresに挿入します
      • 左:=左+ 1
  • direction:=(direction + 1)mod 4
  • return res

理解を深めるために、次の実装を見てみましょう。

class Solution:
   def solve(self, matrix):
      d = 0
      top = 0
      down = len(matrix) - 1
      left = 0
      right = len(matrix[0]) - 1
      c = 0
      res = []
      direction = 0
      while top <= down and left <= right:
         if direction == 0:
            for i in range(left, right + 1):
               res.append(matrix[top][i])
               top += 1

         if direction == 1:
            for i in range(top, down + 1):
               res.append(matrix[i][right])
            right -= 1

         if direction == 2:
            for i in range(right, left - 1, -1):
               res.append(matrix[down][i])
            down -= 1

         if direction == 3:
            for i in range(down, top - 1, -1):
               res.append(matrix[i][left])
            left += 1

         direction = (direction + 1) % 4
      return res

ob = Solution()
matrix = [
   [7, 10, 9],
   [2, 9, 1],
   [6, 2, 3],
   [9, 1, 4],
   [2, 7, 5],
   [9, 9, 11]
]
print(ob.solve(matrix))

入力

[    
[7, 10, 9],    

[2, 9, 1],    

[6, 2, 3],    

[9, 1, 4],    

[2, 7, 5],    

[9, 9, 11]

]

出力

[7, 10, 9, 1, 3, 4, 5, 11, 9, 9, 2, 9, 6, 2, 9, 2, 1, 7]

  1. C行列の境界要素の合計を出力するプログラム

    行列が与えられた場合、行列の境界要素を印刷し、それらの合計を表示する必要があります。 例 以下のマトリックスを参照してください- 与えられたマトリックス 1 2 3 4 5 6 7 8 9 境界マトリックス 1 2 3 4   6 7 8 9 境界要素の合計:1 + 2 + 3 + 4 + 6 + 7 + 8 + 9 =40 境界行列の合計を見つけるためのロジック 次のとおりです- for(i = 0; i<m; i++){    for(j = 0; j<n; j++){       if (i == 0 ||

  2. CプログラムでO(1)の余分なスペースを使用して、nxnスパイラル行列を出力します。

    正の整数nが与えられ、時計回りにO(1)の余分なスペースのみを使用して、nxnのスパイラル行列を作成します スパイラル行列は、円の原点から始まり時計回りに回転するスパイラルのように機能する行列です。したがって、タスクは、2→4→6→8→10→12→14→16→18から始まるO(1)スペースを使用して、行列をスパイラル形式で印刷することです。 以下にスパイラル行列の例を示します- 例 Input: 3 Output:    9 8 7    2 1 6    3 4 1 無制限のスペースでコードを解くのは簡単になりますが、最