题目描述:

方法一:暴力BFS

class Solution:
def minFlips(self, mat) -> int:
R, C = len(mat), len(mat[0]) def helper(mat):
return tuple(tuple(row) for row in mat) visited = set()
queue = collections.deque()
mat_ = helper(mat)
visited.add(mat_)
queue.append(mat)
ans = 0
while queue:
for _ in range(len(queue)):
cur = queue.popleft()
if sum(sum(row) for row in cur) == 0:
return ans
for i in range(R):
for j in range(C):
cur1 = [row[:] for row in cur] #列表的复制一定要深copy
for i_, j_ in [[i, j], [i - 1, j], [i + 1, j], [i, j + 1], [i, j - 1]]:
if 0 <= i_ < R and 0 <= j_ < C:
cur1[i_][j_] ^= 1
cur_ = helper(cur1)
if cur_ not in visited:
visited.add(cur_)
queue.append(cur1)
ans += 1
return -1

方法二:暴力枚举

class Solution:
def minFlips(self, mat) -> int:
R,C = len(mat),len(mat[0])
N = R*C
ans = R*C + 1
for i in itertools.product(range(2),repeat = N):
bns = sum(i)
if bns >= ans:
continue
r = c = 0
B = [row[:] for row in mat]
for adj in i:
if adj:
for i_,j_ in [[r,c],[r+1,c],[r-1,c],[r,c+1],[r,c-1]]:
if 0 <= i_ < R and 0 <= j_ < C:
B[i_][j_] ^= 1
c += 1
if c == C:
c = 0
r += 1
if sum(sum(row)for row in B) == 0:
ans = bns
return ans if ans < N+1 else -1

leetcode-166周赛-5282-转化为全0矩阵的最小反转次数的更多相关文章

  1. LeetCode 5282. 转化为全零矩阵的最少反转次数

    地址 https://leetcode-cn.com/submissions/detail/39277402/ 题目描述给你一个 m x n 的二进制矩阵 mat. 每一步,你可以选择一个单元格并将它 ...

  2. 单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝

    爆零好爽,被中学生虐好爽,还好我毕业得早 求全1(或全0)子矩阵的个数,看了题解有好几种思路,我学了三种,但有两种不是很理解,而且也没另外那个跑得快,所以简单讲述一一下我会的那种来自Caro23333 ...

  3. 【JavaScript】创建全0的Array

    1.创建一个长度为m的全0数组 var arr = new Array(m).fill(0); 2.创建一个m行n列的全0数组 var arr = new Array(m).fill(new Arra ...

  4. leetcode 双周赛9 进击的骑士

    一个坐标可以从 -infinity 延伸到 +infinity 的 无限大的 棋盘上,你的 骑士 驻扎在坐标为 [0, 0] 的方格里. 骑士的走法和中国象棋中的马相似,走 “日” 字:即先向左(或右 ...

  5. LeetCode#453 最小移动次数使数组元素相等

    给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [,,] 输出: 解释: 只需要3次移动(注意每次移动会增加两个 ...

  6. Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II)

    Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II) 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵 ...

  7. LeetCode 453. 最小移动次数使数组元素相等(Minimum Moves to Equal Array Elements) 47

    453. 最小移动次数使数组元素相等 453. Minimum Moves to Equal Array Elements 题目描述 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移 ...

  8. Leetcode之动态规划(DP)专题-931. 下降路径最小和(Minimum Falling Path Sum)

    Leetcode之动态规划(DP)专题-931. 下降路径最小和(Minimum Falling Path Sum) 给定一个方形整数数组 A,我们想要得到通过 A 的下降路径的最小和. 下降路径可以 ...

  9. 【python】Leetcode每日一题-寻找旋转排序数组中的最小元素

    [python]Leetcode每日一题-寻找旋转排序数组中的最小元素 [题目描述] 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组nums ...

随机推荐

  1. spring+JdbcTemplate简单使用(一)

    目录 @ 1. 环境配置 maven(项目管理) idea(编译器) jdk1.8(Java环境) MySQL5.6(MySQL数据库) 2. 创建项目 在 idea 中创建普通的 maven 项目 ...

  2. sql常用 语句总结

    一,插入一个新字段:ALTER TABLE +表名+ADD  COLUMN(字段名+ 类型) sql1 = 'ALTER TABLE klkl_4s_shop ADD COLUMN (name_rea ...

  3. CentOS-7.4(1708)release notes发行注记

    Red Hat Enterprise Linux 当前的最新版本是 7.3. Red Hat Enterprise Linux 7 当前仅支持 64 位CPU:64-bit AMD.64-bit In ...

  4. curl的一些常用命令

    在学习nodejs中get到了一项新的技能crul curl 可以给在命令行上面给node服务器发送一些信息,然后得到服务器返回而响应信息,在命令行中打印出来. 下面是我整理的一些常用的命令:

  5. Unity3D架构之PureMVC

    之前了解过UI实现框架大多是用MVC架构的,才听说有这么一个基于MVC的跨平台开源框架叫PureMVC,前几天用到了做了一下,写一写分析总结官网位置:http://puremvc.org/ PureM ...

  6. 应用安全-Web安全-越权漏洞整理

    login->register GetPhone->GetPasswd GetPwd->GetPassword 遍历https://xx.com/contacts/new?user_ ...

  7. oracle存储过程调试-plsql

    1.搜索找到存储过程的包,并打开 选中右击--view spec&body 2.找到要测试的存储过程,设置断点,进行测试

  8. vue-router 路由元信息 终于搞明白了路由元信息是个啥了

    vue-router 路由元信息:https://blog.csdn.net/wenyun_kang/article/details/70987840 终于搞明白了路由元信息是个啥了:https:// ...

  9. [BZOJ1901][luogu2617]Dynamic Rankings(树状数组+主席树)

    题面 单点修改,区间求第k大 分析 首先,这道题卡权值线段树套treap的做法,所以只能用主席树做 对于静态的查询,root[i]对应的主席树的区间[l,r]保存的是a[1]~a[i]有多少个值落在区 ...

  10. Spacemacs 的配置

    Spacemacs 的配置 */--> Spacemacs 的配置 Table of Contents 1. 安利 2. 安装 3. layer 4. 自带的 layer 5. better-e ...