美文网首页
翻转矩阵后的得分

翻转矩阵后的得分

作者: Houtasu | 来源:发表于2018-08-08 23:05 被阅读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。因为第一位数的权值比后面所有位数的权值加起来都要大。比如8:1000和7:0111。所以让第一位数为1的翻转方式一定是最大的。
然后纵向翻转。纵向的的权值都是一样的,那就让1的个数尽可能多就好,也就是比较1和0的个数,如果1比0少,那就翻转,否则就不翻转。
最后把二进制转换为十进制并求和,得到最终结果。
代码如下:

def matrixScore(self, A):
        """
        :type A: List[List[int]]
        :rtype: int
        """
        for i in range(len(A)):  #横向翻转
            if A[i][0] == 0:
                for j in range(len(A[0])):
                    A[i][j] = A[i][j] ^ 1  #和1异或可以翻转,或者用1-A[i][j]也行

        for i in range(len(A[0])):  #纵向翻转
            num1, num0 = 0, 0
            for j in range(len(A)):
                if A[j][i] == 1:
                    num1 += 1
            num0=len(A)-num1
            if num1 < num0:
                for j in range(len(A)):
                    A[j][i] = A[j][i] ^ 1

        res = 0
        for i in A:
            t=0
            for j in i:
                t = t * 2 + j
            res+=t
        return res

相关文章

  • 翻转矩阵后的得分

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

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

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

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

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

  • T861、翻转矩阵后的得分

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

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

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

  • flipud,fliplr

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

  • 矩阵翻转

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

  • 12、转置矩阵

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

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

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

  • LeetCode 867. 转置矩阵

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

网友评论

      本文标题:翻转矩阵后的得分

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