博物馆网站开发,中国室内设计联盟官方网站入口,网站上传的流程,外贸网站建设多少钱有一个二维矩阵 A 其中每个元素的值为 0 或 1 。
移动是指选择任一行或列#xff0c;并转换该行或列中的每一个值#xff1a;将所有 0 都更改为 1#xff0c;将所有 1 都更改为 0。
在做出任意次数的移动后#xff0c;将该矩阵的每一行都按照二进制数来解释#xff0c;矩…有一个二维矩阵 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
代码
class Solution {public int matrixScore(int[][] A) {for(int i0;iA.length;i)//先保证每一行的第一个元素一定是1{if(A[i][0]0)row(A,i);}for(int i0;iA[0].length;i)//只能从列翻转否则会改变第一位的1{int cnt0;for(int j0;jA.length;j)//统计列中0的个数{cntA[j][i]0?1:0;}if(cntA.length-cnt)//如果0是占多数翻转该列使得1的个数占多保证当前位值是最大的col(A,i);}int weight0,res0;for(int iA[0].length-1;i0;i--)
//同一列的权重是相同的统计列中所有的1乘权重累加所有列就是总和{int cnt0;for(int j0;jA.length;j){cntA[j][i];}rescnt*Math.pow(2,weight);}return res;}public void row(int[][] A,int tar) {for(int i0;iA[0].length;i)A[tar][i]A[tar][i]1?0:1;}public void col(int[][] A,int tar) {for(int i0;iA.length;i)A[i][tar]A[i][tar]1?0:1;}
}