I am working on the Open the lock challenge on LeetCode:
You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots:
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'. The wheels can rotate freely and wrap around: for example we can turn'9'to be'0', or'0'to be'9'. Each move consists of turning one wheel one slot.The lock initially starts at
'0000', a string representing the state of the 4 wheels.You are given a list of
deadendsdead ends, meaning if the lock displays any of these codes, the wheels of the lock will stop turning and you will be unable to open it.Given a
targetrepresenting the value of the wheels that will unlock the lock, return the minimum total number of turns required to open the lock, or -1 if it is impossible.Example 1
Input: deadends = ["0201","0101","0102","1212","2002"], target = "0202" Output: 6
This is my attempt:
var openLock = function(deadends, target) {
let res = 0;
let seen = []
let recursion = function(temp,counter=0){
if(deadends.includes(temp) || seen.includes(temp)) return
seen.push(temp)
if(temp ===target){
res = counter
return
}
for(let i=0; i<temp.length; i++){
let s1 = temp.substring(0, i) + (+temp[i]+1)%10 + temp.substring(i + 1)
let s2 = temp.substring(0, i) + (+temp[i]+9)%10 + temp.substring(i + 1)
recursion(s1,counter+1)
erecursion(s2,counter+1)
}
}
recursion('0000')
return res ?? -1;
};
My output for the example here is 2230, and I don't understand why. It's as if the counter variable value gets updated in every recursive call.