模擬雙周賽36。很神奇的一題,老實說沒什麼特別想法,就試著亂塞,結果就過了。

題目

輸入兩個非負整數陣列rowSum和colSum,其中rowSum[i]是第i列中元素的總和,而colSum[j]是第j行元素的總和。
回傳任一滿足rowSum和colSum要求的非負整數矩陣。答案保證至少有一個。

解法

因為不會出現負數,所以規則就單純很多,在某個位置使用某數,只會讓總體的需求減少,而不會增加。
那麼就盡可能的使用較大的數,趕快滿足總和要求,剩下的格子全部維持0就好。

例如rowSum=[10,5], colSum=[10,5]

r=0, c=0 塞入10
ans=[[10,0],[0,0]] rowSum=[0,5], colSum=[0,5]
r=1, c=0 塞入0
r=0, c=1 塞入0
r=1, c=1 塞入5
ans=[[10,0],[0,5]] rowSum=[0,0], colSum=[0,0]

class Solution:
    def restoreMatrix(self, rowSum: List[int], colSum: List[int]) -> List[List[int]]:
        M=len(rowSum)
        N=len(colSum)
        ans=[[0]*N for _ in range(M)]
        
        for r in range(M):
            for c in range(N):
                x=min(rowSum[r],colSum[c])
                ans[r][c]=x
                rowSum[r]-=x
                colSum[c]-=x
                
        return ans