861. 翻转矩阵后的得分
861. 翻转矩阵后的得分


--写在前面的话--
看到题目之后是比较懵的,感觉是要使用贪心算法,然后就大体上演算了一下,发现遵循三个步骤就可以实现:
(1)将数组每一行第一个元素的值转换为1 ---> 对行进行操作
(2)判断转换后的数组中每一列元素的情况:
- 若1的数量少于0的数量 --> 进行转换
- 否则 --> 不做处理
(3)计算结果
--实现代码--
public int matrixScore(int[][] A) { //第一步:将第一列数字全部置为1 for(int[] i:A){ if(i[0]==0){ for(int j=0;j<i.length;++j){ if(i[j]==0) i[j]=1; else i[j]=0; } } } //第二步:比较每一列中1和0的个数,保证1的个数>=0的个数 for(int j=1;j<A[0].length;++j){ int count = 0; for(int i=0;i<A.length;i++){ if(A[i][j]==1) count++; } if(count<(A.length+1)/2){ for(int i=0;i<A.length;i++){ if(A[i][j]==1) A[i][j]=0; else A[i][j]=1; } } } //第三步:计算数值结果 int res=0; for(int i=0;i<A.length;++i){ for(int j=0;j<A[0].length;++j){ res += A[i][j]*Math.pow(2,A[0].length-j-1); } } return res; }

浙公网安备 33010602011771号