LeetCode 2482. Difference Between Ones and Zeros in Row and Column
雙周賽92。矩陣內的元素是整數0,但是我把判斷式打成字元”0”,浪費一堆時間debug,太憨了。
題目
輸入m*n的矩陣grid。
依照以下規則產生m*n的矩陣diff:
- oneRowi等於第i列的1數量
- oneColj等於第j行的1數量
- zeroRowi等於第i列的0數量
- zeroColj等於第j行的0數量
- diff[i][j] = onesRowi + onesColj - zerosRowi - zerosColj
回傳矩陣diff。
解法
很間單的模擬題,照著敘述做就可以。
第一次遍歷矩陣,計算各行列的0與1數量。因為元素已經讀取完成,第二次遍歷可以直接將答案寫在grid上,最後回傳grid。
時間O(MN),空間至少需要長度M和N的陣列計數,所以是O(min(M,N))。
class Solution:
def onesMinusZeros(self, grid: List[List[int]]) -> List[List[int]]:
M,N=len(grid),len(grid[0])
r0=[0]*M
r1=[0]*M
c0=[0]*N
c1=[0]*N
for r in range(M):
for c in range(N):
if grid[r][c]==0:
r0[r]+=1
c0[c]+=1
else:
r1[r]+=1
c1[c]+=1
for r in range(M):
for c in range(N):
grid[r][c]=r1[r]+c1[c]-r0[r]-c0[c]
return grid