Knight Dialer
MediumDynamic Programming
Solution
export function knightDialer(n: number): number {
const MOD = 10 ** 9 + 7;
const graph = [[4, 6], [6, 8], [7, 9], [4, 8], [0, 3, 9], [], [0, 1, 7], [2, 6], [1, 3], [2, 4]];
let prev = new Array(10).fill(1);
for (let i = 2; i <= n; i++) {
const current = new Array(10).fill(0);
for (let num = 0; num < 10; num++) {
for (const nextNum of graph[num]) {
current[nextNum] += prev[num] % MOD;
}
}
prev = current;
}
return prev.reduce((acc, num) => (acc + num) % MOD, 0);
}