1
var minimumJumps = function (forbidden, a, b, x) {2
let f = new Set(forbidden);5
let visited = new Set();6
let res = dfs(0, true);7
return res === Infinity ? -1 : res;9
function dfs(i, canJumpBack) {10
if (i === x) return 0;11
let key = `${i},${canJumpBack}`;13
if (memo[key] !== undefined) return memo[key];14
if (i > m || i < 0) return Infinity;16
if (canJumpBack && !f.has(i - b) && !visited.has(i - b)) {17
min = Math.min(min, 1 + dfs(i - b, false));20
if (!f.has(i + a) && !visited.has(i + a)) {21
min = Math.min(min, 1 + dfs(i + a, true));25
return (memo[key] = min);