边工作边刷题:70天一遍leetcode: day 50
Additive Number
要点:实现题,三层loop:方式是外层确定前2个数的边界i,第二层确定第一个数的边界j。
- 确定了前两个数后就loop是否为正确序列:这里最好另用个函数,why?
- 逻辑上False退出循环后要进入下一次,但是True的情况也是从内层循环结束,但不进入下一层。如果用函数,可以直接返回True/False,不用在循环结束通过其他条件判断True/False情况
- 结构上说外面的2层循环是初始化,而第三层是判断,所以应该用函数分开
- ‘0’开始的判断的条件:长度>1并且第一个为’0'
- 省时的要点就是早退出:比如第1+2个数最多到2/3长度
错误点:
- i从2开始,j从1开始,全表示数的下一个位置。
class Solution(object):
def isAdditiveNumber(self, num):
"""
:type num: str
:rtype: bool
"""
def helper(num, n1, n2):
#print num, n1, n2
k = 0
while k<len(num):
res = int(n1)+int(n2)
n3 = str(res)
if n3 != num[k:k+len(n3)]:
return False
k+=len(n3)
n1 = n2
n2 = n3 # error 3: should be int()
return True
for i in range(2,len(num)//3*2+1): # not an error2: i is +1 more than right index
for j in range(1, i):
num1 = num[:j]
num2 = num[j:i]
if len(num1)>1 and num[0]=='0': continue
if len(num2)>1 and num[j]=='0': continue
# error 1: j is +1 more than right index
if helper(num[i:], num1, num2):
return True
return False
标签:
leetcode
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
· Vue3封装支持Base64导出的电子签名组件