美文网首页
861. 翻转矩阵后的得分(Python)

861. 翻转矩阵后的得分(Python)

作者: 玖月晴 | 来源:发表于2021-02-26 17:27 被阅读0次

难度:★★★☆☆
类型:数组
方法:数学

力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录

题目

有一个二维矩阵 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

解答

每一行代表一个二进制数,我们可以先通过翻转(如果最高位不是1)或不翻转的方式把每一行的最高位置1,然后再研究从高位到低位每一列,通过翻转或不翻转的方式将每一列的的1的个数最大化。

class Solution:
    def matrixScore(self, A) -> int:
        rows, columes = len(A), len(A[0])

        def colume_zeros_more_than_ones(matrix, index=0):

            return [matrix[i][index] for i in range(rows)].count(0) > (rows / 2)

        def flip(matrix, index=0, axis=0):
            if axis == 0:
                for c in range(columes):
                    matrix[index][c] = 1 - matrix[index][c]

            elif axis == 1:
                for r in range(rows):
                    matrix[r][index] = 1 - matrix[r][index]

            else:
                raise Exception

            return matrix

        # 翻转行
        for r in range(rows):
            if A[r][0] == 0:
                A = flip(matrix=A, index=r, axis=0)

        # 翻转列
        for c in range(columes):
            if colume_zeros_more_than_ones(A, c):
                A = flip(matrix=A, index=c, axis=1)

        return sum([int("".join(map(str, row)), 2) for row in A])

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步力扣中等题解析

相关文章

  • 861. 翻转矩阵后的得分(Python)

    难度:★★★☆☆类型:数组方法:数学 力扣链接请移步本题传送门[https://leetcode-cn.com/p...

  • 翻转矩阵后的得分

    有一个二维矩阵 A 其中每个元素的值为 0 或 1 。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 ...

  • [leetcode]翻转矩阵后的得分&&week

    题目链接:翻转矩阵后的得分 一、题目: 有一个二维矩阵 A 其中每个元素的值为 0 或 1 。 移动是指选择任一行...

  • leetCode进阶算法题+解析(六十)

    翻转矩阵后的得分 题目:有一个二维矩阵 A 其中每个元素的值为 0 或 1 。移动是指选择任一行或列,并转换该行或...

  • T861、翻转矩阵后的得分

    有一个二维矩阵 A 其中每个元素的值为 0 或 1 。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 ...

  • flipud,fliplr

    flipud 将矩阵上下翻转 fliplr 将矩阵左右翻转

  • 矩阵翻转

    题目链接:https://nanti.jisuanke.com/t/5晓萌最近在做一个翻转图片的应用,你可能也知道...

  • 12、转置矩阵

    1、题目如下: 给定一个矩阵 A, 返回 A 的转置矩阵。 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与...

  • leetcode-数组篇-转置数组(867)

    题目 给定一个矩阵 A, 返回 A 的转置矩阵。 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。 ...

  • LeetCode 867. 转置矩阵

    题目 给定一个矩阵 A, 返回 A 的转置矩阵。 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。 ...

网友评论

      本文标题:861. 翻转矩阵后的得分(Python)

      本文链接:https://www.haomeiwen.com/subject/yzritltx.html