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

Python에서 행렬 0 설정

<시간/>

행렬이 있다고 가정해 보겠습니다. 해당 행렬에서 한 요소가 0이면 해당 행렬의 전체 행과 열을 0으로 만듭니다. 변환은 제자리에서 수행됩니다. 따라서 행렬이 -

인 경우
1 0 1
1 1 1
1 1 1

그러면 출력은 -

가 됩니다.
0 0 0
1 0 1
1 0 1

단계를 살펴보겠습니다 -

  • n :=행 수, m :=열 수, 플래그 설정 :=false
  • mat[0, 0] =0이면 플래그 설정 :=true
  • set row :=false 및 col :=false
  • 1~n
      범위의 i에 대해
    • mat[i, 0] =0이면 col :=True로 설정하고 루프를 끊습니다.
  • 1 ~ m
      범위의 i에 대해
    • mat[0, i] =0이면 row :=True로 설정하고 루프를 끊습니다.
  • 1~n
      범위의 i에 대해
    • 1 ~ m
        범위의 j에 대해
      • mat[i, j] =0이면 mat[i, 0] =0 및 mat[0, j] :=0으로 설정
  • 1~n
      범위의 i에 대해
    • 1 ~ m
        범위의 j에 대해
      • mat[i, 0] =0이고 mat[0, j] =0이면 mat[i, j] =0으로 설정
  • 플래그가 설정된 경우
    • 0에서 n 사이의 i에 대해 mat [i, 0] :=0
    • 0에서 m 사이의 i에 대해 mat[0, i] :=0
  • 그렇지 않으면
    • col이 설정되면 0에서 n 사이의 i에 대해 mat [i, 0] :=0
    • 행이 설정되면 0에서 m 사이의 i에 대해 mat [0, i] :=0

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

class Solution(object):
   def setZeroes(self, matrix):
      n = len(matrix)
      m = len(matrix[0])
      flag = False
      if matrix[0][0] == 0:
         flag = True
         row = False
         column = False
      for i in range(1,n):
         if matrix[i][0] == 0:
            column = True
            break
      for i in range(1,m):
         if matrix[0][i] == 0:
            row = True
            break
      for i in range(1,n):
         for j in range(1,m):
            if matrix[i][j] == 0:
               matrix[0][j] = 0
               matrix[i][0]=0
      for i in range(1,n):
         for j in range(1,m):
            if not matrix[i][0] or not matrix[0][j]:
               matrix[i][j] = 0
      if flag:
         for i in range(n):
            matrix[i][0] = 0
         for i in range(m):
            matrix[0][i]=0
      else:
         if column:
            for i in range(n):
               matrix[i][0]=0
         if row:
            for i in range(m):
               matrix[0][i]=0
      return matrix
ob1 = Solution()
print(ob1.setZeroes([[1,0,1],[1,1,1],[1,1,1]]))

입력

[[1,0,1],[1,1,1],[1,1,1]]

출력

[[0, 0, 0], [1, 0, 1], [1, 0, 1]]