翻轉矩陣後的得分(LeetCode)

2021-10-11 14:24:31 字數 1225 閱讀 2942

題目鏈結

有乙個二維矩陣 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能使數值更大,因此我們要保證每一行的第乙個位置為1,所以首先遍歷行,當該行第乙個位置不為1時就要對該行進行翻轉。

如:題目所給的樣例對行進行翻轉後得到[1,1,0,0],[1,0,1,0],[1,1,0,0]

下一步是要保證每一列中1的個數都大於行數的一半,因為同一列中的數值都處於同乙個量級(2^x),所以同一列中1的個數越多就能使總和越大。

如:上述翻轉得到的[1,1,0,0],[1,0,1,0],[1,1,0,0]中第1列(下標從0開始)中有兩個1,多於行數的一半(1),所以不用調整;第2列有乙個1,等於行數的一半(1),因此要翻轉,得到[1,1,1,0],[1,0,0,0],[1,1,1,0];第3列有0個1,也要翻轉,得到[1,1,1,1],[1,0,0,1],[1,1,1,1]

行列都處理完之後求得分即可。

**如下:

class

solution

}//交換列中的值

for(

int i=

1;i)//該列中1的個數小於等於行數的一半

if(sum<=row/2)

}//計算答案

int ans=0;

for(

int i=

0;i)for

(int j=

0;j) ans+

=a[j]

[i]*

pow(

2,col-i-1)

;return ans;}}

;

翻轉矩陣後的得分

問題描述 有乙個二維矩陣 a 其中每個元素的值為 0 或 1 翻轉是指選擇任一行或列,並轉換該行或列中的每乙個值 將所有 0 都更改為 1,將所有 1 都更改為 0。在做出任意次數的翻轉後,將該矩陣的每一行都按照二進位制數來解釋,矩陣的得分就是這些數字的總和。返回盡可能高的分數。示例 輸入 0,0,...

翻轉矩陣後的得分

翻轉矩陣後的得分 力扣861題。題目描述 有乙個二維矩陣 a 其中每個元素的值為 0 或 1 移動是指選擇任一行或列,並轉換該行或列中的每乙個值 將所有 0 都更改為 1,將所有 1 都更改為 0。在做出任意次數的移動後,將該矩陣的每一行都按照二進位制數來解釋,矩陣的得分就是這些數字的總和。返回盡可...

861 翻轉矩陣後的得分

package com.heu.wsq.leetcode 861.翻轉矩陣後的得分 author wsq date 2020 12 7 有乙個二維矩陣 a 其中每個元素的值為 0 或 1 移動是指選擇任一行或列,並轉換該行或列中的每乙個值 將所有 0 都更改為 1,將所有 1 都更改為 0。在做出任...