LeetCode 861. 翻转矩阵后的得分(C、C++、python)

有一个二维矩阵 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 <= A.length <= 20

1 <= A[0].length <= 20

A[i][j] 是 0 或 1

C

int matrixScore(int** A, int ARowSize, int *AColSizes) 
{
    int m=ARowSize;
    int n=*AColSizes;
    int res=0;
    for(int i=0;i<m;i++)
    {
        if(A[i][0]==0)
        {
            for(int j=0;j<n;j++)
            {
                A[i][j]=1-A[i][j];
            }
        }
    }
    for(int j=1;j<n;j++)
    {
        int count=0;
        for(int i=0;i<m;i++)
        {
            if(A[i][j]==1)
            {
                count++;
            }
        }
        if(count<=m/2)
        {
            for(int i=0;i<m;i++)
            {
                A[i][j]=1-A[i][j];
            }
        }
    }
    for(int i=0;i<m;i++)
    {
        for(int j=n-1;j>=0;j--)
        {
            res += A[i][n-1-j]*pow(2,j);
        }
    }
    return res;   
}

C++

class Solution {
public:
    int matrixScore(vector<vector<int>>& A) 
    {
        int res=0;
        int m=A.size();
        int n=A[0].size();
        for(int i=0;i<m;i++)
        {
            if(A[i][0]==0)
            {
                for(int j=0;j<n;j++)
                {
                    A[i][j]=1-A[i][j];
                }
            }
        }
        for(int j=1;j<n;j++)
        {
            int count=0;
            for(int i=0;i<m;i++)
            {
                if(A[i][j]==1)
                {
                    count++;
                }
            }
            if(count<=m/2)
            {
                for(int i=0;i<m;i++)
                {
                    A[i][j]=1-A[i][j];
                }
            }
        }
        for(int i=0;i<m;i++)
        {
            for(int j=n-1;j>=0;j--)
            {
                res += A[i][n-1-j]*pow(2,j);
            }
        }
        return res;
    }
};

python

class Solution:
    def matrixScore(self, A):
        """
        :type A: List[List[int]]
        :rtype: int
        """
        res=0
        m=len(A)
        n=len(A[0])
        for i in range(0,m):
            if A[i][0]==0:
                for j in range(n):
                    A[i][j] = 1-A[i][j]
        for j in range(1,n):
            count=0
            for i in range(0,m):
                if A[i][j]==1:
                    count += 1
            if count<=m//2:
                for i in range(0,m):
                    A[i][j] = 1-A[i][j]
        for i in range(0,m):
            for j in range(n):
                res += A[i][j]*(2**(n-1-j))
        return res

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/82944062