Knight Dialer
Last updated
Last updated
class Solution {
public static final int MOD = 1000000007;
private static final int[][] graph =
new int[][]{{4,6},{6,8},{7,9},{4,8},{3,9,0},{},{1,7,0},{2,6},{1,3},{2,4}};
public int knightDialer(int N) {
int res = 0;
for (int i = 0; i <= 9; i++) {
res = (res + dfs(N - 1, i, new Integer[N + 1][10])) % MOD;
}
return res;
}
private int dfs(int N, int start, Integer[][] memo) {
if (N == 0) {
return 1;
}
if (memo[N][start] != null) {
return memo[N][start];
}
int res = 0;
for (int nei : graph[start]) {
res = (res + dfs(N - 1, nei, memo))% MOD;
}
memo[N][start] = res;
return res;
}
}