LeetCode翻转矩阵后的得分-Python3<六>

栏目: 编程工具 · 发布时间: 5年前

内容简介:上一篇:题目:废话:这次真的比以往的要难做,初次看题目,懵逼!题目都没懂!!!换个日子,咦?可以做做喔!

上一篇: LeetCode子域名访问计数-Python3.7<五>

题目: https://leetcode-cn.com/problems/score-after-flipping-matrix/description/

废话:这次真的比以往的要难做,初次看题目,懵逼!题目都没懂!!!换个日子,咦?可以做做喔!

有一个二维矩阵 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在哪里 使二进制数更大?

2、从最高位(即最左边)开始增大数值 

3、改变的同时不能影响更高位(即最更左边的数字),否则组成二进制数又变小了

4、二进制的相加(e.g:  它们是相等的    1*(2**3)+1*(2**0)  = 0b1000+0b1)

因此代码思路:

1、每行的第一列必须为1

2、改变每列(除第一列),如果该列满足0的个数大于1的个数,否则得不偿失

3、算总得分

class Solution:
    def matrixScore(self, A):
        """
        :type A: List[List[int]]
        :rtype: int
        """
        if A==[]:
            return 0
        
        rowNum = len(A)
        columnNum = len(A[0])
        
        for row in A:
            if row[0]==0:
                row[0]=1
                for column in range(1,columnNum):
                    if row[column]==1:
                        row[column]=0
                    else:
                        row[column]=1
        print(columnNum)
           
        if columnNum>1:            
            for column1 in range(1,columnNum):                               
                sum0=0
                for row in range(rowNum):
                    if A[row][column1]==0:
                        sum0=sum0+1
                
                print(sum0)
                
                if (sum0*2>rowNum or sum0==rowNum):                   
                    for row in A:                        
                        if row[column1]==0:
                            row[column1]=1
                        else:
                            row[column1]=0
                    
        score = 0        
        for row in A:           
            for i in range(columnNum):
                tmp=(int)(row[i])                
                score = score + tmp*(2**(columnNum-1-i))
            
        return score

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构、算法与应用

数据结构、算法与应用

(美)Sartaj Sahni / 汪诗林、孙晓东、等 / 机械工业出版社 / 2000-01 / 49.00

本书是关于计算机科学与工程领域的基础性研究科目之一――数据结构与算法的专著。 本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之算法、分枝定界算法等多种算法设计方法,为数据结构与算法的继续学习和研究奠定了一个坚实的基础。更为可贵的是,本书不仅仅介绍了理论知识,还提供了50多个应用实例及600多道练习题。 本书......一起来看看 《数据结构、算法与应用》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具