Re: [閒聊] 每日leetcode
https://leetcode.com/problems/score-after-flipping-matrix/description/
861. Score After Flipping Matrix
給你一個二維陣列,他可以被看成多個二進位數字,例如:
100 = 4
011 = 3
你可以對行或列進行翻轉把0和1交換,你可以翻轉無限次求出怎麼樣翻轉可以讓二進制
數的和最大。
思路:
1.觀察一下列什麼時候要翻轉,我們發現最左邊的數字如果是0翻轉一定會變大,1則一
定變小,所以遇到第一位為0就翻轉該列。
2.觀察行什麼時候要翻轉,我們可以發現如果0的數量比1多翻轉一定會變大,數有幾個0
如果大於1的數量就翻轉他。
3.把行列翻轉完的矩陣轉成十進制求和。
py code:
----------------------------------------
class Solution:
def matrixScore(self, grid: List[List[int]]) -> int:
m, n = len(grid), len(grid[0])
for i in range(m):
if grid[i][0] == 0:
# reverse
for j in range(n):
grid[i][j] = (grid[i][j] + 1) % 2
for i in range(n):
zero = 0
for j in range(m):
if grid[j][i] == 0:
zero += 1
if zero > m // 2:
# reverse
for j in range(m):
grid[j][i] = (grid[j][i] + 1) % 2
# to binary
res = 0
for i in range(m):
num = 0
for j in range(n):
num = num*2 + grid[i][j]
res += num
return res
----------------------------------------
for迴圈可以壓吧 懶得想==
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.139.102.20 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1715564075.A.B66.html
推
05/13 09:36,
1月前
, 1F
05/13 09:36, 1F
推
05/13 09:52,
1月前
, 2F
05/13 09:52, 2F
討論串 (同標題文章)