You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode跳跃游戏递归解法求助:无法实现回溯逻辑

递归实现跳跃游戏问题的修正方案

问题回顾

给定整数数组nums,初始位置为数组第一个索引,数组每个元素代表当前位置的最大跳跃长度。判断是否能到达最后一个索引,能则返回true,否则返回false。

示例1:
输入:nums = [2,3,1,1,4]
输出:True
解释:从索引0跳1步到索引1,再跳3步到最后一个索引。

示例2:
输入:nums = [3,2,1,0,4]
输出:False
解释:无论如何都会到达索引3,其最大跳跃长度为0,无法到达最后一个索引。

你的代码问题分析

你当前的递归代码存在几个关键问题:

  • 多余的外层for i in range(len(n))循环:每次递归的数组是从当前跳跃位置开始的切片,当前递归只需要处理数组的第一个位置(即当前所处的位置),不需要遍历整个数组。
  • 错误的直接返回递归结果:内层循环里return self.jumpGame(n[next:])会导致只要第一个跳跃路径失败就直接返回false,不会尝试其他可能的跳跃步数。
  • 0值处理逻辑缺失:当当前位置的跳跃长度为0时,内层循环不会执行,但之前的结构会直接走到最后返回false,不过整体逻辑的错误导致回溯失效。

修正后的递归代码

def jumpGame(self, n: []) -> bool:
    # 已经到达或超过最后一个索引,返回True
    if len(n) <= 1:
        return True
    # 当前位置的最大跳跃步数
    max_step = n[0]
    # 当前位置无法跳跃,直接返回False
    if max_step == 0:
        return False
    # 尝试所有可能的跳跃步数
    for j in range(1, max_step + 1):
        # 如果该跳跃路径能到达终点,立即返回True
        if self.jumpGame(n[j:]):
            return True
    # 所有路径都尝试过,无法到达终点,返回False
    return False

代码逻辑说明

  1. 终止条件:当传入的数组长度小于等于1时,说明已经站在最后一个索引(或超出),直接返回True。
  2. 当前位置判断:如果当前位置的最大跳跃步数为0,说明无法前进,直接返回False。
  3. 尝试所有跳跃可能:遍历从1到max_step的所有步数,对每个步数递归处理对应的子数组。只要有一个递归调用返回True,就说明这条路径可行,立即返回True。
  4. 回溯处理:所有跳跃步数都尝试后仍无法到达终点,返回False,触发上层递归尝试其他路径。

测试验证

  • 针对示例1:第一次递归尝试跳1步到[3,1,1,4],在该递归中尝试跳3步到[4],触发终止条件返回True,最终整体返回True。
  • 针对示例2:所有可能的跳跃路径最终都会走到包含0的子数组,此时返回False,所有路径尝试完毕后整体返回False。

内容的提问来源于stack exchange,提问作者sotn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:36:18