leetcode_861. 翻转矩阵后的得分

举报
悲恋花丶无心之人 发表于 2021/02/03 00:32:08 2021/02/03
【摘要】 目录 一、题目内容 二、解题思路 三、代码 一、题目内容 有一个二维矩阵 A 其中每个元素的值为 0 或 1 。 移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 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,然后除第一列之外从左往右每列的1的个数应该大于0的个数,否则翻转,最终可得到结果;

三、代码


  
  1. class Solution:
  2. def matrixScore(self, A: list) -> int:
  3. m = len(A)
  4. n = len(A[0])
  5. # 第一列全为1
  6. for i in range(m):
  7. if A[i][0] == 1:
  8. continue
  9. else:
  10. for j in range(n):
  11. A[i][j] = 1 - A[i][j]
  12. for j in range(n):
  13. zero_count = 0
  14. for i in range(m):
  15. if A[i][j] == 0:
  16. zero_count += 1
  17. # 某一列 0 的数量超过一半
  18. if zero_count * 2 > m:
  19. # 置反
  20. for i in range(m):
  21. if A[i][j] == 0:
  22. A[i][j] = 1
  23. else:
  24. A[i][j] = 0
  25. res = 0
  26. # 求和
  27. for i in range(m):
  28. tmp = 0
  29. for j in range(n - 1, -1, -1):
  30. power = n - j - 1
  31. tmp += pow(2, power) * A[i][j]
  32. res += tmp
  33. return res
  34. if __name__ == '__main__':
  35. A = [[0,0,1,1],
  36. [1,0,1,0],
  37. [1,1,0,0]]
  38. s = Solution()
  39. ans = s.matrixScore(A)
  40. print(ans)

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/110792044

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。