与一般DP不同的是 青蛙能跳k-1,k,k+1步三种不同的情况 所以用字典存储跳到这个石头上所用的步数
class Solution(object):
def canCross(self, stones):
"""
:type stones: List[int]
:rtype: bool
"""
#maxJumpstep 记录的是上一次跳过来的步数
if len(stones)<=1: return True
elif stones[1]!=1: return False
else:
maxJumpstep={s:set() for s in stones}
maxJumpstep[1].add(1)
for s in stones[1:-1]:
for j in maxJumpstep[s]:
for jump in (j-1,j,j+1):
if jump>0 and s+jump in maxJumpstep:
maxJumpstep[s+jump].add(jump)
return len(maxJumpstep[stones[-1]])>0