leetcode1284 转化为全零矩阵的最少反转次数

m == mat.lengthn == mat[0].length1 <= m <= 31 <= n <= 3mat[i][j]是 0 或 1 。
BFS, 代码来自花花leetcode https://mp.weixin.qq.com/s/cxr4xp8iBRN6T2kgxWVTrw
可以再尝试DFS;
class Solution {
public:
int minFlips(vector<vector<int>>& mat) {
int m = mat.size();
int n= mat[].size();
auto flip = [&](int &s, int x, int y){
if(x< || x>=n || y< || y>=m) return;
s^=(<<y*n+x);
};
auto flipCell = [&](int s, int x, int y){
int t=s;
flip(t,x,y);
flip(t,x-,y);
flip(t,x+,y);
flip(t,x,y+);
flip(t,x,y-);
return t;
};
int steps=;
queue<int> q;
vector<int> seen(<<(n*m));
int s=;
for(int y=;y<m;++y)
for(int x=;x<n;++x)
s|=(mat[y][x]<<(y*n+x));
if(s==) return ;
q.push(s);
seen[s]=;
while(!q.empty()){
int size=q.size();
while(size--){
int ss=q.front();
q.pop();
for(int y=;y<m;++y)
for(int x=;x<n;++x){
int t=flipCell(ss,x,y);
if(seen[t]) continue;
if(t==) return steps+;
seen[t]=;
q.push(t);
}
}
++steps;
}
return -;
}
};
leetcode1284 转化为全零矩阵的最少反转次数的更多相关文章
- LeetCode 5282. 转化为全零矩阵的最少反转次数
地址 https://leetcode-cn.com/submissions/detail/39277402/ 题目描述给你一个 m x n 的二进制矩阵 mat. 每一步,你可以选择一个单元格并将它 ...
- [LeetCode] Minimum Moves to Equal Array Elements II 最少移动次数使数组元素相等之二
Given a non-empty integer array, find the minimum number of moves required to make all array element ...
- 面试题:对一个正整数n,算得到1需要的最少操作次数
实现一个函数,对一个正整数n,算得到1需要的最少操作次数.操作规则为:如果n为偶数,将其除以2:如果n为奇数,可以加1或减1:一直处理下去.例子:func(7) = 4,可以证明最少需要4次运算n = ...
- 给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数。
问题: 给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数. 你总共三种操作方法: 1.插入一个字符 2.删除一个字符 3.替换一个字符 格式: 输入行输 ...
- x变成y的最少操作次数(层次遍历)
输入x,y,x为源数字,y为目标值.输出x变成y的最少操作次数. x每次可以执行三种操作:-1 . +1 . x2: 如 x=5,y=8:5-1=4,4x2=8;所以输出结果为2(次操作). 可以发现 ...
- nyoj最少乘法次数——快速幂思想
最少乘法次数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘.如24:2*2 ...
- 使序列有序的最少交换次数(minimum swaps)
交换相邻两数 如果只是交换相邻两数,那么最少交换次数为该序列的逆序数. 交换任意两数 数字的总个数减去循环节的个数?? A cycle is a set of elements, each of wh ...
- LeetCode:最少移动次数使得数组元素相等||【462】
LeetCode:最少移动次数使得数组元素相等||[462] 题目描述 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最 ...
- 【ACM】最少乘法次数 - 树
最少乘法次数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘.如24:2*2 ...
随机推荐
- SpringCloud之RabbitMQ安装
本文介绍Linux以及MAC OS下的RabbitMQ安装及配置: 一.Linux环境下的RabbitMQ安装(CentOS) 1.安装ErLang Erlang(['ə:læŋ])是一种通用的面向并 ...
- Linux ppp 数据收发流程
转:http://blog.csdn.net/yangzheng_yz/article/details/11526671 PPP (Point-to-Point)提供了一种标准的方法在点对点的连接上传 ...
- vi和vim的使用
本章内容: vi编辑器简介 vim基本使用 vim使用技巧 一.vim简介 vim是一个全屏幕纯文本编辑器,是vi编辑器的增强版. 二.vim的基本使用 1.vim的工作模式 命令模式:是主要使用快键 ...
- K8S搭建过程随笔_系统初始化
组件 Kubernetes 1.14.2 Docker 18.09.6-ce Etcd 3.3.13 Flanneld 0.11.0 基础环境设置 192.168.11.188 k8s-master ...
- Ubuntu18.04安装OpenCV4.1.0
Ubuntu18.04安装OpenCV4.1.0 1.首先要安装依赖 sudo apt-get install build-essential \ cmake git libgtk2.0-dev pk ...
- linux基础_使用指令3
时间日期类 1.date指令 功能:显示当前日期 语法: date:显示当前时间 date +%Y:显示当前年份 date +%m:显示当前月份 date +%d:显示当前是哪一天 date &quo ...
- connect: network is unreachable
解决方法: 在确保完善网卡驱动,以及确保将网卡驱动编译进内核后,检查 ls /etc/sysconfig/network-script/ifcfg-eth0 一.看是否在上述目录下存在ifcfg-et ...
- metal docs--Synchronization&memory management
https://developer.apple.com/documentation/metal/heaps/image_filter_graph_with_heaps_and_fences?langu ...
- php+文件夹上传实例
核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...
- [Luogu] 花神游历各国
https://www.luogu.org/problemnew/show/P4145 线段树区间求和 + 区间开根号 对1e9的数开根号下取整用不了几次就会<=1 因此暴力开根号,记录区间最大 ...