代码拉取完成,页面将自动刷新
/*
* @lc app=leetcode.cn id=752 lang=cpp
*
* [752] 打开转盘锁
*/
// @lc code=start
class Solution {
public:
int openLock(vector<string>& deadends, string target) {
if (target == "0000") return 0;
unordered_set<string> seen(deadends.begin(), deadends.end());
if (seen.count("0000")) return -1;
auto num_pre = [](char x) -> char {
return x == '0' ? '9' : x - 1;
};
auto num_succ = [](char x) -> char {
return x == '9' ? '0' : x + 1;
};
auto get = [&](string& status) -> vector<string> {
vector<string> ret;
for (int i = 0; i < 4; ++i) {
char num = status[i];
status[i] = num_pre(num);
ret.emplace_back(status);
status[i] = num_succ(num);
ret.emplace_back(status);
status[i] = num;
}
return ret;
};
queue<string> que;
que.emplace("0000");
int step = 1;
while (!que.empty()) {
int sz = que.size();
for (int j = 0; j < sz; ++j) {
string cur = que.front();
que.pop();
for (auto& next_status : get(cur)) {
if (!seen.count(next_status)) {
if (next_status == target) return step;
que.emplace(next_status);
seen.emplace(next_status);
}
}
}
step++;
}
return -1;
}
};
// @lc code=end
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。