861. 翻轉矩陣後的得分
阿新 • • 發佈:2018-12-22
題目描述
有一個二維矩陣
A
其中每個元素的值為0
或1
。移動是指選擇任一行或列,並轉換該行或列中的每一個值:將所有
0
都更改為1
,將所有1
都更改為0
。在做出任意次數的移動後,將該矩陣的每一行都按照二進位制數來解釋,矩陣的得分就是這些數字的總和。
返回儘可能高的分數。
示例:
輸入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]] 輸出:39 解釋: 轉換為 [[1,1,1,1],[1,0,0,1],[1,1,1,1]] 0b1111 + 0b1001 + 0b1111 = 15 + 9 + 15 = 39
提示:
1 <= A.length <= 20
1 <= A[0].length <= 20
A[i][j]
是0
或1
思路:
- 首先要保證首列全部為
1
,就是說A[i][0]=1
,0<=i<row
。 - 然後每列要儘可能多的
1
附上程式碼:
class Solution(object): def matrixScore(self, A): """ :type A: List[List[int]] :rtype: int """ if not A: return 0 row = len(A) col = len(A[0]) print("初始值:",A) for i in range(row): if A[i][0] == 0: for j in range(col): A[i][j] = 1 - A[i][j] print("首列全為0:",A) base = 1 res = 0 for k in range(col-1,-1,-1): temp_one = sum([A[i][k] for i in range(row)]) max_col_one = max(temp_one,row - temp_one) temp = max_col_one*base res += temp base = base << 1 return res
測試程式碼:
a = Solution()
print(a.matrixScore([[0,0,1,1],[1,0,1,0],[1,1,0,0]]))
答案顯示:
39
正確!!