LeetCode-861. 翻轉矩陣後的得分(Java實現)
阿新 • • 發佈:2020-12-11
LeetCode題號:861. 翻轉矩陣後的得分
描述:有一個二維矩陣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;
- 豎變換保證其他列(除頭列)1比0多;
class Solution { public int matrixScore(int[][] A) { int hang = A.length; int lie = A[0].length; //1、先翻轉第一列是0的行,0變成1 目的保證最高位為1; for (int i = 0; i < hang; i++) { //頭位為1的直接跳過 if (A[i][0] == 1) { continue; } //翻轉該行 for(int j=0;j<lie;j++){ //0,1換值 A[i][j] = A[i][j]^1;//二目運算子;同位為0;否則為1 } } //2、然後保證讓後幾列的1儘量多;按列統計 for (int j = 1; j < lie; j++) { int count = 0;//統計每一列的0個數 for (int i = 0; i < hang; i++) { if (A[i][j] == 0) { count++; } } //0的數量超過1,則該行0,1換值 if (count > hang / 2) { for (int i = 0; i < hang; i++) { A[i][j] = A[i][j]^1;//二目運算子;同位為0;否則為1 } } } //二進位制計算; int ans = 0; for (int z = 0; z < hang; z++) { for (int k = lie - 1; k >= 0; k--) { ans += (A[z][k] * Math.pow(2, lie - k - 1)); } } return ans; } }
往期回顧:
【2】LeetCode-1370. 上升下降字串(Java實現)
【3】LeetCode-454. 四數相加 II(Java實現)
❤如果文章對您有所幫助,就在文章的右上角或者文章的末尾點個贊吧!(づ ̄ 3 ̄)づ
❤如果喜歡大白兔分享的文章,就給大白兔點個關注吧!(๑′ᴗ‵๑)づ╭❤~
❤對文章有任何問題歡迎小夥伴們下方留言或者入群探討【群號:708072830】
❤鑑於個人經驗有限,所有觀點及技術研點,如有異議,請直接回復討論(請勿發表攻擊言論)