1. 程式人生 > >LeetCode 861. 翻轉矩陣後的得分(C、C++、python)

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