1. 程式人生 > 實用技巧 >每日一題20201207(861. 翻轉矩陣後的得分)

每日一題20201207(861. 翻轉矩陣後的得分)

連結就不放了 容易被和諧

思路

  • 貪心

    只要保證每一行的數是最大的,那麼總的數字就是最大的。

    怎麼保證每一行的數字是最大的呢,高位越大,整個數字就越大。

    分3步:

    1. 把所有高位都變成1
    2. 開始遍歷第2到N行,把每列裡面0比較多的進行旋轉,保障1比0多
    3. 遍歷求和
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]