当前位置:网站首页>LeetCode 1591. 奇怪的打印机 II --判断排序
LeetCode 1591. 奇怪的打印机 II --判断排序
2022-04-22 05:36:00 【Guapifang】
- 奇怪的打印机 II
给你一个奇怪的打印机,它有如下两个特殊的打印规则:
每一次操作时,打印机会用同一种颜色打印一个矩形的形状,每次打印会覆盖矩形对应格子里原本的颜色。
一旦矩形根据上面的规则使用了一种颜色,那么 相同的颜色不能再被使用 。
给你一个初始没有颜色的 m x n 的矩形 targetGrid ,其中 targetGrid[row][col] 是位置 (row, col) 的颜色。
如果你能按照上述规则打印出矩形 targetGrid ,请你返回 true ,否则返回 false 。
示例 1:

输入:targetGrid = [[1,1,1,1],[1,2,2,1],[1,2,2,1],[1,1,1,1]]
输出:true
示例 2:

输入:targetGrid = [[1,1,1,1],[1,1,3,3],[1,1,3,4],[5,5,1,4]]
输出:true
示例 3:
输入:targetGrid = [[1,2,1],[2,1,2],[1,2,1]]
输出:false
解释:没有办法得到 targetGrid ,因为每一轮操作使用的颜色互不相同。
示例 4:
输入:targetGrid = [[1,1,1],[3,1,3]]
输出:false
提示:
m == targetGrid.length
n == targetGrid[i].length
1 <= m, n <= 60
1 <= targetGrid[row][col] <= 60
题解
就是排序啊,如果排序后还存在不符合排序结果的数据,就说明不能打印出来。
AC代码
class Solution {
public:
struct Node
{
int x1,y1,x2,y2,key;
}arr[61];
vector<Node>q;
//判断a1.key类型的区域中是否出现了a2.key
bool check(Node a1, Node a2, vector<vector<int>>& targetGrid)
{
for(int i=a1.x1;i<=a1.x2;i++)
{
for(int j=a1.y1;j<=a1.y2;j++)
{
if(targetGrid[i][j]==a2.key)return true;
}
}
return false;
}
bool isPrintable(vector<vector<int>>& targetGrid)
{
for(int i=1;i<=60;i++)
{
arr[i].x1 = 1e9;
arr[i].y1 = 1e9;
arr[i].x2 = -1e9;
arr[i].y2 = -1e9;
}
for(int i=0;i<targetGrid.size();i++)
{
for(int j=0;j<targetGrid[i].size();j++)
{
int key = targetGrid[i][j];
arr[key].x1 = min(arr[key].x1, i);
arr[key].y1 = min(arr[key].y1, j);
arr[key].x2 = max(arr[key].x2, i);
arr[key].y2 = max(arr[key].y2, j);
arr[key].key = key;
}
}
for(int i=1;i<=60;i++)
{
q.push_back(arr[i]);
}
//这里做一次排序处理
for(int i=0;i<q.size();i++)
{
for(int j=i+1;j<q.size();j++)
{
if(check(q[j],q[i],targetGrid))//q[j]区域出现了q[i],说明q[j]应该在q[i]前面
{
swap(q[i],q[j]);
}
}
}
//这里判断排序后的结果,是否存在冲突
for(int i=0;i<q.size();i++)
{
for(int j=i+1;j<q.size();j++)
{
if(check(q[j],q[i],targetGrid))//q[j]区域出现了q[i],q[j]在q[i]前面
{
return false;
}
}
}
return true;
}
};

版权声明
本文为[Guapifang]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43918046/article/details/123552937
边栏推荐
猜你喜欢
随机推荐
Mysql高级部分
The difference between set method and add method in list
力扣237. 删除链表指定节点
‘PdfFileWriter‘ object has no attribute ‘stream‘
伪代码块编写(论文编写用)
vs 断点无法调试 The breakpoint will not currently be hit. No symbols have been loaded for this document.
Do you know the three implementation methods of strlen?
提高工作效率的利器
excel根据单元格内容设定行列颜色
mysql中json类型字段用法
数据挖掘——关联规则挖掘
数据挖掘——逻辑回归
Sword finger offer 22 The penultimate node in the linked list
完全背包问题
raspberry keras-ocr can‘t allocate memory in static TLS block
数据已删除,又重新出现的问题排查
Enquête JVM
Force buckle - 322 Change
Force buckle 19 Delete the penultimate node of the linked list
单机部署redis主从与哨兵模式(一主两从三哨兵)









