1
var canCross = function (stones) {3
function dfs(idx = 0, jumpUnits = 0) {4
let key = `${idx}-${jumpUnits}`;5
if (key in hash) return hash[key];7
if (idx === stones.length - 1) return true;8
if (idx >= stones.length) return false;10
let minJump = jumpUnits - 1,11
maxJump = jumpUnits + 1;12
for (let i = idx + 1; i < stones.length; i++) {13
let jump = stones[i] - stones[idx];14
if (jump >= minJump && jump <= maxJump) {15
if (dfs(i, jump)) return (hash[idx] = true);16
} else if (jump > maxJump) break;18
return (hash[key] = false);