題目信息
給你一個 n 行 m 列的矩陣,最開始的時候,每個單元格中的值都是 0。
另有一個索引數組 indices,indices[i] = [ri, ci] 中的 ri 和 ci 分別表示指定的行和列(從 0 開始編號)。
你需要將每對 [ri, ci] 指定的行和列上的所有單元格的值加 1。
請你在執行完所有 indices 指定的增量操作後,返回矩陣中 「奇數值單元格」 的數目。
說明:
- 1 <= n <= 50
- 1 <= m <= 50
- 1 <= indices.length <= 100
- 0 <= indices[i][0] < n
- 0 <= indices[i][1] < m
示例:
1:
輸入:n = 2, m = 3, indices = [[0,1],[1,1]]
輸出:6
解釋:最開始的矩陣是 [[0,0,0],[0,0,0]]。
第一次增量操作後得到 [[1,2,1],[0,1,0]]。
最後的矩陣是 [[1,3,1],[1,3,1]],裏面有 6 個奇數。
2:
輸入:n = 2, m = 2, indices = [[1,1],[0,0]]
輸出:0
解釋:最後的矩陣是 [[2,2],[2,2]],裏面沒有奇數。
解題思路
#改變矩陣的函數
def changeMatrix(num):
#改變行
for i in range(m):
matrix[num[0]][i] += 1
#改變列
for i in range(n):
matrix[i][num[1]] += 1
#計算list奇數個數
def countOdd(num):
return len([x for x in num if x%2 != 0])
matrix = []
for i in range(n):
matrix += [[0]*m]
for item in indices:
changeMatrix(item)
result = 0
for item in matrix:
result += countOdd(item)
return result
主要思路是建立2個子函數,重點說一下第二個,用列表推導式直接快速求出奇數個數,然後通過遍歷去累加結果
學習
TODO
思路比較簡單,可以考慮先處理indices中重複的地方,然後再進行矩陣加 甚至可以沒有實際意義上的矩陣,比如重複加兩次第n行,那麼實際上等於沒加,可以推廣到偶數等於0次,奇數等於1次,這樣可以減少無意義的加法操作