1
var openLock = function (deadends, target) {2
if (deadends.includes("0000")) {5
// treat deadends like visited6
// if a number is in visited/deadends, simply ignore it7
const visited = new Set(deadends);9
const queue = [["0000", 0]];12
while (queue.length) {13
const [cur, count] = queue.shift();18
// each number will create 8 more different paths to check20
// e.g. if cur = 0000. 8 next/prev numbers to check are21
// 1000, 9000, 0100, 0900, 0010, 0090, 0001, 000922
for (let i = 0; i < 4; i++) {25
let up = Number(c) + 1;26
let down = Number(c) - 1;27
// if up is 9, then up + 1 = 10 -> set it to 031
// if down is 0. then down - 1 = -1 -> set to 936
const next = cur.substring(0, i) + up + cur.substring(i + 1);37
const prev = cur.substring(0, i) + down + cur.substring(i + 1);39
// if not visited, push to queue40
if (!visited.has(next)) {42
queue.push([next, count + 1]);45
if (!visited.has(prev)) {47
queue.push([prev, count + 1]);