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

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

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

上一篇: 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

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

查看所有标签

猜你喜欢:

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

Java Servlet & JSP Cookbook

Java Servlet & JSP Cookbook

Bruce W. Perry / O'Reilly Media / 2003-12-1 / USD 49.99

With literally hundreds of examples and thousands of lines of code, the Java Servlet and JSP Cookbook yields tips and techniques that any Java web developer who uses JavaServer Pages or servlets will ......一起来看看 《Java Servlet & JSP Cookbook》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具