양의 정수 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 감소
- col1 ~ col2 범위에 있는 i의 경우,
- 반환 결과
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
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]]