zoukankan      html  css  js  c++  java
  • LeetCode翻转矩阵后的得分-Python3<六>

    上一篇: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
  • 相关阅读:
    c-free5
    node.js模块
    cd
    bower
    atom插件
    反射(操作MetaData)
    1.Html
    SQL语句 把一个表的数据复制到另外一个表里面
    Redis 可视化工具
    C# 多文件压缩包
  • 原文地址:https://www.cnblogs.com/bibi-feiniaoyuan/p/9325233.html
Copyright © 2011-2022 走看看