LeetCode翻转矩阵后的得分-Python3<六&am…
2018-07-18 01:15:41来源:博客园 阅读 ()
上一篇: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
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python列表生成式、键盘输入及类型转换、字符串翻转、字母大 2019-07-24
- 20190712-01矩阵的解题思考 2019-07-24
- 矩阵的运算:Python语言实现 2019-07-24
- LeetCode链表简单题 2019-07-24
- 20190524-矩阵算法,矩阵相加,矩阵相乘,矩阵转置等 2019-05-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash