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

LeetCode 1013题一行代码解法原理详解求助

LeetCode 1013题一行代码解法详解

先明确LeetCode 1013题的核心要求:判断给定数组是否能被拆分为三个非空部分,且三个部分的和完全相等。

下面逐段拆解这段一行代码的逻辑:

代码整体结构

import itertools
A = [0,2,1,-6,6,-7,9,1,2,0,1]
def canThreePartsEqualSum(A):
    return (lambda x,y: x in y and 2*x in y and 3*x in y)(sum(A)//3,itertools.accumulate(A))
print(canThreePartsEqualSum(A))

这段代码用匿名函数(lambda)封装了判断逻辑,一次性传入两个核心计算结果,直接返回布尔值。

核心参数解析

1. 目标和 x = sum(A)//3

  • 先计算数组的总和,再用整数除法除以3,得到每一部分需要达到的目标和x。
  • 如果数组总和无法被3整除,sum(A)//3 *3会小于原总和,后续3*x in y的判断会直接失败,返回False——这符合题意:总和不能三等分的数组,必然无法拆成三个等和部分。

2. 前缀和序列 y = itertools.accumulate(A)

itertools.accumulate(A)会生成数组的前缀和迭代器:比如数组[a1,a2,a3,...],它会依次返回a1、a1+a2、a1+a2+a3……直到整个数组的总和。

判断条件逻辑

匿名函数的三个判断条件是递进且互补的:

  • x in y:说明数组中存在某个位置,从开头到该位置的和正好等于x——这意味着我们能划出第一块和为x的非空部分。
  • 2*x in y:说明存在某个位置,前缀和等于2x——这意味着从第一块结束的位置到该位置的和也是x(因为2x - x = x),也就是第二块非空部分也符合要求。
  • 3*x in y:这个值本质就是数组的总和(如果总和能被3整除,3x = sum(A)),它的作用有两个:一是验证总和确实是x的3倍,二是保证第三块是非空的——因为前面已经找到x和2x的位置,剩下的从2x位置到数组末尾的部分和必然是x,且长度至少为1。

边界情况验证

比如当数组总和为0时(如全0数组),x=0,此时前缀和序列会有多个0,三个条件都会满足,返回True,符合要求:可以拆分成三个非空的全0子数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:45:36