骑士拨号器问题详解:用动态规划计算骑士跳跃电话号码数量
题目描述
象棋中的骑士拥有独特的移动方式:它可以沿着“L”形移动——即先垂直移动两格,再水平移动一格,或先水平移动两格,再垂直移动一格。
在一个电话拨号键盘上,我们将骑士放置在数字单元格(蓝色单元格)上,这些数字为 0 到 9。骑士只能跳跃到数字键盘上能够合法到达的数字单元格。
给定一个整数 nn,我们需要计算能拨打多少个长度为 nn 的不同电话号码。
- 骑士可以从任何数字开始拨号;
- 之后执行 n-1 次合法骑士跳跃;
- 所有跳跃均需满足骑士跳跃规则;
- 由于答案可能很大,结果需对 10^9+7 取模。
数字键盘布局与骑士跳跃规则
数字键盘布局如下:
1 2 3
4 5 6
7 8 9
0
骑士跳跃必须符合“L”形规则:
- 垂直方向跳两格,水平方向跳一格;
- 或水平方向跳两格,垂直方向跳一格。
例如,数字“1”骑士可跳至“6”和“8”,数字“0”骑士可跳至“4”和“6”。