【013】Leetcode—數組—1252. 奇數值單元格的數目(Sum of Square Numbers)

題目信息

給你一個 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次,這樣可以減少無意義的加法操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章