题目:
给你一个 m x n 的矩阵,最开始的时候,每个单元格中的值都是 0。
另有一个二维索引数组 indices,indices[i] = [ri, ci] 指向矩阵中的某个位置,其中 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。
对 indices[i] 所指向的每个位置,应同时执行下述增量操作:
ri 行上的所有单元格,加 1 。
ci 列上的所有单元格,加 1 。
给你 m、n 和 indices 。请你在执行完所有 indices 指定的增量操作后,返回矩阵中 奇数值单元格 的数目。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/cells-with-odd-values-in-a-matrix
解:
class Solution: def oddCells(self, m: int, n: int, indices: List[List[int]]) -> int: lst = [[0 for j in range(n)]for i in range(m)] for indice in indices: row,col = indice for i in range(m): lst[i][col] +=1 for j in range(n): lst[row][j] += 1 res = 0 for row in lst: for x in row: if x%2 == 1: res += 1 return res
看了官方题解后,发现可以优化到10行:
class Solution: def oddCells(self, m: int, n: int, indices: List[List[int]]) -> int: lst = [[0 for j in range(n)]for i in range(m)] for indice in indices: row,col = indice for i in range(m): lst[i][col] +=1 for j in range(n): lst[row][j] += 1 return sum(x%2 for row in lst for x in row )
统计二维列表中奇数的个数,可以列表推导+sum(iterable)函数一行完成。