Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 나선 행렬 II

<시간/>

양의 정수 n이 있다고 가정하고 나선 순서로 n2개의 요소가 있는 정방 행렬을 생성해야 합니다. 따라서 n =5이면 행렬은 -

1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

단계를 살펴보겠습니다 -

  • (row1, col1) :=(0, 0) 및 (row2, col2) :=(n, n)을 설정하고 res라는 행렬 하나를 만든 다음 0으로 채우고 num :=1<로 설정합니다. /리>
  • 숫자 <=n2,
    • col1 ~ col2 범위에 있는 i의 경우,
      • res[row1, i] =num, num을 1로 인케이스
      • num> n2이면 중단
    • 행1 + 1에서 행2 사이의 i에 대해,
      • res[i, col2-1] =num, num을 1로 인케이스
      • num> n2이면 중단
    • col2 – 2 범위에서 col1 – 1까지 i의 경우,
      • res[row2 – 1, i] =num, num을 1로 인케이스
      • num> n2이면 중단
    • 행 2 – 2에서 행 1까지의 i에 대해,
      • res[i, col1] =num, num을 1로 인케이스
    • row1을 1 증가, row2를 1 감소, col1을 1 증가, col2를 1 감소
  • 반환 결과

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

class Solution(object):
   def generateMatrix(self, n):
      row1 = 0
      col1 = 0
      row2 = n
      col2 = n
      result = [ [0 for i in range(n)] for j in range(n)]
      num = 1
      while num<=n**2:
         for i in range(col1,col2):
            result[row1][i] = num
            num+=1
         if num > n**2:
            break
         for i in range(row1+1,row2):
            result[i][col2-1] = num
            num+=1
         if num > n**2:
            break
         for i in range(col2-2,col1-1,-1):
            result[row2-1][i] = num
            num+=1
         if num > n**2:
            break
         for i in range(row2-2,row1,-1):
            result[i][col1] = num
            num+=1
            row1+=1
            row2-=1
            col1+=1
            col2-=1
            #print(result)
      return result
ob1 = Solution()
print(ob1.generateMatrix(4))

입력

4

출력

[[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]