题目描述:
解题思路:
给定一个翻转方案,则它们之间任意交换顺序后,得到的结果保持不变。因此,我们总可以先考虑所有的行翻转,再考虑所有的列翻转。
为了使最大,第一列要先全变成1,然后后面的列,如果0比1多,就变换。
参考代码:
public static int matrixScore(int[][] A) {
//更改第一列
for (int i = 0; i < A.length; i++) {
if(A[i][0]!=1)
{
for (int j = 0; j < A[i].length; j++) {
if(A[i][j]==1)
{
A[i][j]=0;
}
else
{
A[i][j]=1;
}
}
}
}
//其他列,如果0比1多,就变换
for (int i = 1; i <A[0].length; i++) {
int one=0;
int zeo=0;
for (int j = 0; j <A.length ; j++) {
if(A[j][i]==1)
{
one++;
}
else
{
zeo++;
}
}
if(zeo>one)
{
for (int j = 0; j < A.length; j++) {
if(A[j][i]==1)
{
A[j][i]=0;
}
else
{
A[j][i]=1;
}
}
}
}
return helper(A);
}
private static int helper(int[][] A){
int sum=0;
int ans;
for (int i = 0; i < A.length; i++) {
ans= (int) Math.pow(2,A[i].length-1);
for (int j = 0; j < A[i].length; j++) {
if(A[i][j]==1)
{
sum+=ans;
}
ans/=2;
}
}
return sum;
}