要注意的是数据类型,不然会出错
这点真的没有python好啊
class Solution {
public int knightDialer(int n) {
// 动态规划
// 按拨号键,除了5以外,每个数字的下一步都有2种可能的结果
// 1: 6 8
// 2: 7 9
// 3: 4 8
// 4: 3 9
// 5: 无
// 6: 1 7
// 7: 2 6
// 8: 1 3
// 9: 2 4
// 0: 4 6
// 状态A:1 3 7 9 (对称)
// 状态B:2 8 (对称)
// 状态C:4 6 (对称)
// 状态D:0
// 任选A中的一个,他可能走到状态B。也有可能走到状态C
// 任选B中的一个,他的两种走法都是走向状态A
// 任选C中的一个,他的三种走法中,两种走向状态A,一种走向状态D
// 选择D中的0,他的两种走法都是走向状态C
int MOD = 1000000007;
if(n==1) return 10;
// 步数大于等于2的情况,设置4种不同的状态,每种状态初始都为1步,剩下n-1步
long[] state = new long[4];
Arrays.fill(state, 1);
int i = 1;
while(i<n){
long a_A = state[1]+state[2];
long a_B = 2*state[0];
long a_C = 2*state[0]+state[3];
long a_D = 2*state[2];
state[0] = a_A%MOD;
state[1] = a_B%MOD;
state[2] = a_C%MOD;
state[3] = a_D%MOD;
i++;
}
long ans = 4*state[0]+2*state[1]+2*state[2]+state[3];
ans %= 1000000007;
return (int)ans;
}
}