每日一題20201207(861. 翻轉矩陣後的得分)
阿新 • • 發佈:2020-12-07
連結就不放了 容易被和諧
思路
-
貪心
只要保證每一行的數是最大的,那麼總的數字就是最大的。
怎麼保證每一行的數字是最大的呢,高位越大,整個數字就越大。
分3步:
- 把所有高位都變成1
- 開始遍歷第2到N行,把每列裡面0比較多的進行旋轉,保障1比0多
- 遍歷求和
class Solution: def matrixScore(self, A: List[List[int]]) -> int: for l in range(len(A)): # 把每一列第一個數為0的行進行替換 if A[l][0] == 0: self.changeLine(A, l) for k in range(len(A[0])): for _ in range(1, len(A)): self.changeColumn(A, k) result = 0 for l in range(len(A)): temp = 0 for c in range(len(A[l])): temp = temp + A[l][c] * 2 ** (len(A[l]) - c - 1) result += temp return result def changeLine(self, A, line): for i in range(len(A[line])): A[line][i] = 1 - A[line][i] def changeColumn(self, A, col): avg = sum([A[x][col] for x in range(len(A))]) / len(A) # 如果這一列加起來平均數小於0.5,那麼說明0比1多 if avg < 0.5: for l in range(len(A)): A[l][col] = 1 - A[l][col]