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

企业官网建设 创意网站建设大连开发区盛京医院电话

企业官网建设 创意网站建设,大连开发区盛京医院电话,浙里建官方网站,wordpress修改文章点赞数题目链接&#xff1a;https://leetcode.cn/problems/zlDJc7/ 题目大意&#xff1a;给出一个四位数字的密码锁&#xff0c;初始状态是0000&#xff0c;目标是targer。每一次转动只能让一个位的轮盘转动一下&#xff08;0往后转是9&#xff09;。有一个vector<string> dea…

题目链接:https://leetcode.cn/problems/zlDJc7/

题目大意:给出一个四位数字的密码锁,初始状态是0000,目标是targer。每一次转动只能让一个位的轮盘转动一下(0往后转是9)。有一个vector<string> deadends,里面有很多四位的数字,如果转到其中的数字,就会死锁。我们在达到目标的过程中不能死锁。返回到达目标的最小步数,如果无法达到目标,返回-1

思路:BFS,每一步,每个数字有8个可能的变化。如果未访问且不属于死锁就加入队列。但这题还有挺多小细节的,做的时候debug了挺久…

首先,因为要得到步数,因此需要记录BFS的层数。所以BFS的while循环内还得加一层,qs记录当前队列长度,然后遍历完前qs个元素才给步数+1。

其次,【是否访问过某个数字】,实际上在其未加入队列,而在其作为邻居被访问时就可以标记了。在代码中表现为accdec就可以加入known中。当其作为q.front()再标记时,实际上可能是第二次或更多次的访问了,此时可能出现【同一数字被塞入队列多次】的情况。

比如q[1]的邻居是1234,未访问且不死锁,加入队列。而q[2]的邻居也是1234,未访问且不死锁,又加入队列。这样就塞了多次。因此,一个数字作为邻居被访问到时,就将其标记为访问过。

还有两个edge cases。

  • 如果0000属于死锁,那么直接返回-1
  • 如果target就是0000,就直接返回0

第二处是因为我们对一个数字的操作都在其【作为邻居被访问时】进行,而在队列中作为队首访问时,不再判断是否与target相等了。

                    string acc = getAcc(q.front(), idx);if (!known.count(acc) && !de.count(acc)) {known.insert(acc);if (acc == target)return step+1;elseq.push(acc);}

完整代码

class Solution {
public:string getAcc(string str, int idx) {string ret = str;if (ret[idx] == '9')ret[idx] = '0';elseret[idx]++;return ret;}string getDec(string str, int idx) {string ret = str;if (ret[idx] == '0')ret[idx] = '9';elseret[idx]--;return ret;}int openLock(vector<string>& deadends, string target) {set<string> de;set<string> known;string init("0000");for (int i = 0; i < deadends.size(); i++)de.insert(deadends[i]);queue<string> q;q.push(init);known.insert(init);if (de.count(init))return -1;if (target == init)return 0;int step = 0;while (!q.empty()) {int qs = q.size();for (int j = 0; j < qs; j++) {for (int idx = 0; idx < 4; idx++) {string acc = getAcc(q.front(), idx);if (!known.count(acc) && !de.count(acc)) {known.insert(acc);if (acc == target)return step+1;elseq.push(acc);}string dec = getDec(q.front(), idx);if (!known.count(dec) && !de.count(dec)) {known.insert(dec);if (dec == target)return step+1;elseq.push(dec);}}q.pop();}step++;}return -1;}
};
http://www.yayakq.cn/news/605558/

相关文章:

  • 哈尔滨网站营销推广东莞网络推广服务商
  • 网站建设文献西丽网站建设
  • 有哪些做的很漂亮的网站wordpress允许爬取
  • 外国购物网站有哪些平台盘锦做网站公司
  • 门户网站建设审批程序老铁seo外链工具
  • 网站制作公司优势广东企业网络推广教程
  • 易讯网络网站建设网站建设制作博走
  • 长沙网站建设论坛营销策划书怎么写格式
  • 电子商务网站管理系统2023年7月最新新闻摘抄
  • 网站设计制作的服务好不好做物流行业网站的开发公司
  • 怎么做服务器网站下载链接江苏建设纸质考试网站
  • app应用下载网站源码网页制作与设计属于什么专业
  • 怎么样百度搜到自己的网站网站 参数设置
  • 微信建站网站企业网站管理系统多少钱一年
  • 帮别人做网站多少钱蚌埠做网站的公司
  • 有赞商城网站建设安卓优化大师hd
  • 上海建网站服务器广西壮族自治区专升本业务系统
  • 淄博 做网站wordpress轮播的插件下载
  • 阿里云 网站网站建设公司彩铃
  • 盛世阳光-网站建设可信赖的企业网站开发
  • 东莞专业建网站现在如何进行网上推广
  • 我做网站啦 圆通导航openwrt 网站开发
  • 福田网站设计哪家好东营网站建设东营市南一路东营软件园英
  • ps如何做切片网站按钮0基础做下载网站
  • 阿里云网站怎么备案域名解析余姚电商交易网站建设
  • 电子商务网站建设管理深圳租赁住房和建设局网站
  • 建设一个网站的意义网站建设 佛山
  • 湖南省建设厅网站制作网页填数据
  • 电子网站建设ppt模板网店营销策划方案ppt
  • 手机网站排名优化软件wordpress站群管理系统