解题思路:先判断每一行的第一个元素,是否是0,如果是,就翻转该行;判断第2列到最后一列中,每列0的个数
是否大于1的个数,如果是,就翻转该列;之后按照二进制数的解释进行计算。
public int matrixScore(int[][] A)
{
if (A == null || A.length == 0)
return 0;
int rows = A.length; // 行数
int cols = A[0].length; // 列数
int zeroNum = 0; // 0的个数
int oneNum = 0; // 1的个数
int score = 0; // 得分
// 每一行,若第一个元素不为1,修改该行
for (int i=0; i<rows; i++)
{
if (A[i][0] != 1)
{
// 修改该行
for (int j=0; j<cols; j++)
{
if (A[i][j] == 1)
A[i][j] = 0;
else if (A[i][j] == 0)
A[i][j] = 1;
}
}
}
// 每一列,如果0的个数大于1的个数,就翻转
for (int i=1; i<cols; i++)
{
oneNum = 0; // 清零
zeroNum = 0;
for (int j=0; j<rows; j++)
{
if (A[j][i] == 0)
zeroNum++;
else
oneNum++;
}
if (oneNum < zeroNum)
{
// 翻转该列
for (int j=0; j<rows; j++)
{
if (A[j][i] == 0)
A[j][i] = 1;
else
A[j][i] = 0;
}
}
}
// 按照二进制数来解释每一行
for (int i=0; i<rows; i++)
{
for (int j=0; j<cols; j++)
{
score += (A[i][j] * (int) Math.pow(2, cols-j-1));
}
}
return score;
}