问题:
在给定的标准拨号盘上,当你跳跃N次时,可以通过骑士棋子的走法移动。同时不能落到任何无效值上,如X。请问有多少个唯一的数字可以生成?你可以穿过无效值,但不能落在它们上面。
拨号器:
1 2 3
4 5 6
7 8 9
X 0 X
与此非常相似
我目前拥有的但速度极慢(Python 2.7)
jumpMap = {
1: [6,8],
2: [7,9],
3: [4,8],
4: [0, 3, 9],
5: [],
6: [0, 1, 7],
7: [2, 6],
8: [1, 3],
9: [2, 4],
0: [4, 6]
}
def findUnique(start, jumps):
if jumps == 1:
# Base case 1 jump
return len(jumpMap[start])
if start == 5:
return 0
sum = 0
for value in (jumpMap[start]):
sum = sum + findUnique(value, jumps-1)
return sum
我猜最简单的优化方式是使用某种记忆化方法,但是考虑到问题限制,我无法想出如何使用。