当前位置: 首页 > news >正文

2023-08-07力扣今日二题

链接:

剑指 Offer 29. 顺时针打印矩阵

题意:

如题

解:

麻烦的简单题,具体操作类似走地图,使用一个长度四的数组表示移动方向

我这边的思路是如果按正常的方向没有路走了,那转向下一个方向一定有路,不然就是最后一格了

所以每次就先找下一个位置,然后check函数判断是否合法(走过的设置为INT_MAX),合法的话输出自身然后移动到下一个位置,不合法的话就转向判断下一个位置是否合法,这时候如果转完还不合法,则退出

退出的时候最后一格还没有输出,所以输出一下

PS:之前我是用-1当标记的,结果卡了一组数据,换了INT_MAX然后AC了,不过出题没给范围,应该是包含整数范围的,也算是偷鸡了,不过用longlong配LLONG_MAX也是一样的,所以无所谓啦

实际代码:

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
PII add(const PII& lhs,const PII& rhs)
{PII ret{0,0};ret.first=lhs.first+rhs.first;ret.second=lhs.second+rhs.second;return ret;
}
bool check(const PII& now,const int& lgr,const int& lgc,const vector<vector<int>>& matrixCopy)
{if(now.first<0||now.first>=lgr) return false;if(now.second<0||now.second>=lgc) return false;if(matrixCopy[now.first][now.second]==INT_MAX) return false;return true;
}
vector<int> spiralOrder(vector<vector<int>>& matrix)
{vector<int> ret;//答案 vector<vector<int>>matrixCopy(matrix);//拷贝原数组 int zt=0,moved=0;PII move[4]={ {0,1},{1,0},{0,-1},{-1,0}};//移动相关 int lgrow=matrix.size();if(!lgrow) return ret;//行数 int lgcol=matrix[0].size();if(!lgcol) return ret;//列数 PII start={0,0};//起点while(true){PII next=add(start,move[zt]);//cout<<"next:"<<next.first<<" "<<next.second<<endl;if(check(next,lgrow,lgcol,matrixCopy))//有路 {ret.push_back(matrixCopy[start.first][start.second]);matrixCopy[start.first][start.second]=INT_MAX;start=next;moved++;}else//没路 {zt++;zt%=4;moved=0;//转向 next=add(start,move[zt]);if(check(next,lgrow,lgcol,matrixCopy)) continue;//转完以后有没有路 else break;}}ret.push_back(matrixCopy[start.first][start.second]);return ret;
}
int main()
{vector<vector<int>> matrix;int n,m,temp;cin>>n>>m;for(int i=0;i<n;i++){vector<int>t;for(int j=0;j<m;j++){cin>>temp;t.push_back(temp);}matrix.push_back(t);}vector<int>ans=spiralOrder(matrix);for(auto &a:ans) cout<<a<<ends;return 0;
}

限制:

  • 0 <= matrix.length <= 100
  • 0 <= matrix[i].length <= 100
http://www.lryc.cn/news/113672.html

相关文章:

  • Spring接口ApplicationRunner的作用和使用介绍
  • 奶牛排队 java 思维题
  • uniapp 微信小程序 判断数据返回的是jpg还是pdf,以及pdf预览
  • SpringBoot 的事务及使用
  • Android中的ABI
  • Python爬虫在用户行为模型构建中的应用与挑战
  • LangChain与大模型的学习
  • C语言标准定义的32个关键字
  • PE半透明屏是怎么制造的?工艺、材料、应用
  • linux文本三剑客---grep,sed,awk
  • leaflet-uniapp 缩放地图的同时 显示当前缩放层级
  • [Securinets CTF Quals 2023] Admin Service,ret2libc,One is enough
  • 计算机组成原理-笔记-第二章
  • mysql大量数据导入记要
  • 极狐GitLab 全新「价值流仪表盘」使用指南
  • 通过logrotate实现nginx容器内日志按天存储
  • 广东珠海电子行业导入MES系统需要注意什么
  • 小红书2023/08/06Java后端笔试 AK
  • 3、有序数组的平方
  • 用于自然语言处理 (NLP) 的 MLOps
  • C#抽象静态方法
  • 小研究 - Mysql快速全同步复制技术的设计和应用(一)
  • HTML <samp> 标签
  • C之(8)linux动态库编译框架
  • Zabbix网络拓扑配置
  • 2.4G芯片XL2408开发板,SOP16封装,芯片集成1T 8051内核单片机
  • iPhone苹果手机地震预警功能怎么开启?
  • Storm学习之使用官方Docker镜像快速搭建Storm运行环境
  • 【GTest学习】
  • [JAVAee]网络通信基础