题目链接:https://leetcode-cn.com/problems/frog-jump/
题意
有n个石头排一行,每个石头位置按升序给出,一开始在石头0位置,需要跳到石头n-1位置,一开始只能跳1距离,上次跳了k距离则这次只能跳k-1,k,k+1距离,只能往后跳,询问是否能跳到n-1位置
题解
使用dp求解
d
p
[
i
]
表
示
对
于
i
位
置
可
以
往
后
跳
的
距
离
集
合
dp[i]表示对于i位置可以往后跳的距离集合
dp[i]表示对于i位置可以往后跳的距离集合
每次就枚举后面的值进行跳转,或者枚举集合里面的值进行跳转,转移到后面的dp值
最后询问dp[n-1]是否为空即可
复杂度
O
(
n
2
)
O(n^2)
O(n2)
code
class Solution:
def canCross(self, stones: list) -> bool:
n = len(stones)
dp = [{} for i in range(n)]
dp[0][1] = 1
for i in range(n):
for j in range(i+1, n):
dx = stones[j]-stones[i]
if(dx in dp[i]):
dp[j][dx-1] = 1
dp[j][dx] = 1
dp[j][dx+1] = 1
return len(dp[n-1].keys()) > 0