------
## 最终结论
```python
def canCross(stones):
    if not stones or stones[0] != 0:
        return False
    
    stone_set = set(stones)
    dp = {stone: set() for stone in stones}
    dp[0].add(0)  # The frog starts at the first stone with a jump of 0
    
    for stone in stones:
        for k in dp[stone]:  # k is the last jump length
            for jump in (k - 1, k, k + 1):  # Possible next jumps
                if jump > 0 and (stone + jump) in stone_set:
                    dp[stone + jump].add(jump)
    
    return len(dp[stones[-1]]) > 0
```