2행 이진 행렬 재구성하기

1892 단어 theabbieleetcodedsa
n 열과 2 행이 있는 행렬의 다음 세부 정보가 제공됩니다.
  • 행렬은 이진 행렬입니다. 즉, 행렬의 각 요소는 0 또는 1 일 수 있습니다.
  • 0번째(상위) 행의 요소 합은 upper로 지정됩니다.
  • 1-st(lower) 행 요소의 합은 lower 로 지정됩니다.
  • i번째 열(0-색인)에 있는 요소의 합은 colsum[i]입니다. 여기서 colsum는 길이가 n인 정수 배열로 제공됩니다.

  • 당신의 임무는 upper , lowercolsum 로 행렬을 재구성하는 것입니다.

    2차원 정수 배열로 반환합니다.

    하나 이상의 유효한 솔루션이 있는 경우 그 중 하나가 수락됩니다.

    유효한 솔루션이 없으면 빈 2차원 배열을 반환합니다.

    예 1:

    입력: 상한 = 2, 하한 = 1, 열 = [1,1,1]
    출력: [[1,1,0],[0,0,1]]
    설명: [[1,0,1],[0,1,0]], [[0,1,1],[1,0,0]]도 정답입니다.

    예 2:

    입력: 상한 = 2, 하한 = 3, 열 = [2,2,1,1]
    출력: []

    예 3:

    입력: 상위 = 5, 하위 = 5, 열 = [2,1,2,0,1,0,1,2,0,1]
    출력: [[1,1,1,0,1,0,0,1,0,0],[1,0,1,0,0,0,1,1,0,1]]

    제약:
  • 1 <= colsum.length <= 10^5
  • 0 <= upper, lower <= colsum.length
  • 0 <= colsum[i] <= 2

  • 해결책:

    class Solution:
        def reconstructMatrix(self, upper: int, lower: int, colsum: List[int]) -> List[List[int]]:
            n = len(colsum)
            op = [[0 for i in range(n)] for j in range(2)]
            ctr = []
            for i in range(n):
                if colsum[i] == 2:
                    op[0][i] = 1
                    upper -= 1
                    op[1][i] = 1
                    lower -= 1
                elif colsum[i] == 1:
                    ctr.append(i)
            if upper >= 0 and lower >= 0 and upper + lower == len(ctr):
                if upper > 0:
                    for i in ctr[:upper]:
                        op[0][i] = 1
                if lower > 0:
                    for i in ctr[-lower:]:
                        op[1][i] = 1
                return op
            return []
    

    좋은 웹페이지 즐겨찾기