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

LeetCode《Check if There is a Valid Partition For The Array》递归终止求助

修正LeetCode《Check if There is a Valid Partition For The Array》递归解法的终止问题

你的代码核心问题出在递归参数设计混乱和递归逻辑错误,导致空列表的终止条件无法被正确触发,同时递归路径的判断逻辑完全错误。以下是问题分析和修正方案:

原代码的核心问题

  1. 参数冗余且逻辑混乱:同时传递nums(子数组)和s(原数组),加上k的错误使用,导致递归时无法正确跟踪处理进度,空列表的终止条件几乎不会被触发。
  2. 递归逻辑错误:用两个递归结果相加后直接返回False,完全忽略了递归返回的有效路径判断,即便存在正确分区也会返回错误结果。
  3. 终止条件设计不合理:通过传递空数组作为终止信号,不如直接用索引跟踪处理位置,当索引到达数组末尾时即代表分区成功。

修正后的代码

class Solution:
    def validPartition(self, nums: list[int]) -> bool:
        memo = {}
        n = len(nums)
        
        def partition_helper(i):
            # 处理到数组末尾,说明所有元素已成功分区
            if i == n:
                return True
            # 已缓存的结果直接返回,避免重复计算
            if i in memo:
                return memo[i]
            
            valid = False
            # 情况1:取两个相等的元素
            if i + 1 < n and nums[i] == nums[i+1]:
                valid = valid or partition_helper(i + 2)
            # 情况2:取三个元素,满足全相等或连续递增1
            if i + 2 < n:
                is_triple_equal = nums[i] == nums[i+1] == nums[i+2]
                is_consecutive = nums[i+1] - nums[i] == 1 and nums[i+2] - nums[i+1] == 1
                if is_triple_equal or is_consecutive:
                    valid = valid or partition_helper(i + 3)
            
            memo[i] = valid
            return valid
        
        return partition_helper(0)

关键修改点说明

  1. 用索引替代子数组传递:递归参数i代表当前处理到数组的第i个元素,当i == len(nums)时,说明所有元素都已完成有效分区,直接返回True(这就是你想要的“空列表”终止逻辑的正确实现)。
  2. 优化缓存逻辑:memo缓存的是索引i对应的结果,相比缓存整个子数组的tuple,效率更高且逻辑清晰。
  3. 正确判断合法分区:
    • 当剩余元素≥2时,判断前两个元素是否相等,若相等则递归处理i+2的位置。
    • 当剩余元素≥3时,判断三个元素是否全相等或连续递增1,若满足则递归处理i+3的位置。
  4. 逻辑判断修正:用valid = valid or ...来判断是否存在至少一条有效分区路径,只要其中一个递归返回True,当前结果即为True。

测试你的示例nums=[4,4,4,5,6,6,6,6],修正后的代码会正确返回True,可行的分区方式比如:[4,4](索引0-1)→ [4,5,6](索引2-4)→ [6,6,6](索引5-7),完全符合题目要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:54:51