数据结构与算法之图: LeetCode 65. 有效数字 (Ts, Py, Go版)

Claude Opus 4.7真实能力边界:单函数补全强,跨文件推理弱 AI编程助手的核心价值不在于‘生成代码’,而在于降低软件系统的认知熵值——即提升上下文感知精度、变更影响预测能力和防御式编码内化程度。当前主流大模型如Claude Opus 4.7在单函数级代码补全(如异常处理分支补全)上已具备较高稳定性,响应延迟优化显著;但在跨文件依赖推理(如DAO层变更需同步更新Service/Controller)和状态一致性维护(如分布式锁续期、多端状态同步)等工程关键场景中,仍存在建模局限与错误率反弹。其本质是模型对‘软件工程上下文’的抽象能力不足,而非算力或数据缺陷。因此,真实 阅读详情

有效数字

  • https://leetcode.cn/problems/valid-number/

描述

  • 有效数字(按顺序)可以分成以下几个部分:

    • 一个 小数 或者 整数
    • (可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数
  • 小数(按顺序)可以分成以下几个部分:

    • (可选)一个符号字符(‘+’ 或 ‘-’)
    • 下述格式之一:
      • 至少一位数字,后面跟着一个点 ‘.’
      • 至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字
      • 一个点 ‘.’ ,后面跟着至少一位数字
  • 整数(按顺序)可以分成以下几个部分:

    • (可选)一个符号字符(‘+’ 或 ‘-’)
    • 至少一位数字
  • 部分有效数字列举如下:[“2”, “0089”, “-0.1”, “+3.14”, “4.”, “-.9”, “2e10”, “-90E3”, “3e+7”, “+6e-1”, “53.5e93”, “-123.456e789”]

  • 部分无效数字列举如下:[“abc”, “1a”, “1e”, “e3”, “99e2.5”, “–6”, “-+3”, “95a54e53”]

  • 给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true 。

示例 1

输入:s = "0"
输出:true

示例 2:

输入:s = "e"
输出:false

示例 3

输入:s = "."
输出:false

提示

  • 1 <= s.length <= 20
  • s 仅含英文字母(大写和小写),数字(0-9),加号 ‘+’ ,减号 ‘-’ ,或者点 ‘.’ 。

Typescript 版算法实现


1 )正则

function isNumber(s: string): boolean {
    return new RegExp(`^([+-]?\\d+\\.?\\d*|[+-]?\\d*\\.?\\d+)([eE]([+-]?\\d+))?$`).test(s);
};
  • 一般在前端工具中, 会提供一个工具类,判断是否是有效的数字,而这个工具类,一般也用正则处理

2 )原生API

function isNumber(s: string): boolean {
    if(s == "Infinity"||s=="-Infinity"||s=="+Infinity") return false
    return !isNaN(Number(s));
}
  • 这是Javascript中提供的原生API直接可进行判断

3 )邻接表(图)标识的状态机

function isNumber(s: string): boolean {
    const graph = {
        0: {'blank': 0, 'sign': 1, '.': 2, 'digit': 6},
        1: {'digit': 6, '.': 2},
        2: {'digit': 3},
        3: {'digit': 3, 'e': 4},
        4: {'digit': 5, 'sign': 7},
        5: {'digit': 5},
        6: {'digit': 6, '.': 3, 'e': 4},
        7: {'digit': 5},
    }
    let state = 0; // 记录一个变量
    // 遍历字符串, 先取出字符串的前后空格
    for(let c of s.trim()) {
        // 接下来把字符稍微做一些转化
        if(c >='0' && c <= '9') {
            // js做比较时候,会把字符转换成数字
            c = 'digit';
        } else if(c === ' ') {
            c = 'blank';
        } else if(c === '+' || c === '-') {
            c = 'sign';
        }
        // 获取新的状态  这里 toLowerCase 防止 E 的出现, 其他字符不是字母也不会报错
        state = graph[state][c.toLowerCase()];
        if(!state) return false;
    }
    return [3, 5, 6].includes(state);
}

  • 解题思路
    • 用一张图的数据结构,存储节点
    • 节点是字符串的8种状态,这8种状态只有3,5,6是合法的数字
    • 状态之间可以相互转换
      • 对于一个空字符串来说,它的状态是0,如果在空字符串后面加上一个+/-号,它就会从状态0变成状态1
      • 在状态1这个状态下,后面再加上点这个符号,它会变成状态2
      • 对于状态2来说,后面再加上0-9这个数字,它就会变成状态3
      • 后面依次类推
    • 有了这个图我们可以方便判断字符串是否是有效数字了
    • 从状态0开始,一个字符一个字符的走,最终能走到3,5,6这三个状态,它就是有效的
    • 否则,不管是走不到,还是到某个节点没路走了,它都是无效的
  • 解题步骤
    • 构建一个表示状态的图的数据结构,用邻接表的表示法
    • 遍历字符串中的每个字符,并沿着图走,从状态0开始,如果到了某个节点无路可走就返回false
    • 遍历结束,如果走到3,5,6状态,则返回true, 否则返回false
  • 时间复杂度,O(n)
    • 循环n次
  • 空间复杂度, O(1)
    • 一个图,不变化,常量

Python3 版算法实现


1 ) 方案1:正则

class Solution:
    def isNumber(self, s: str) -> bool:
        return re.match(r'^([+-]?\d+\.?\d*|[+-]?\d*\.?\d+)([eE][+-]?\d+)?$', s.strip()) is not None

2 ) 方案2:图 + 状态机

class Solution:
    def isNumber(self, s: str) -> bool:
        graph = {
            0: {'blank': 0, 'sign': 1, '.': 2, 'digit': 6},
            1: {'digit': 6, '.': 2},
            2: {'digit': 3},
            3: {'digit': 3, 'e': 4},
            4: {'digit': 5, 'sign': 7},
            5: {'digit': 5},
            6: {'digit': 6, '.': 3, 'e': 4},
            7: {'digit': 5},
        }
        state = 0
        for c in s.strip():
            if c.isdigit():
                c = 'digit'
            elif c == ' ':
                c = 'blank'
            elif c in '+-':
                c = 'sign'
            state = graph[state].get(c.lower(), None)
            if state is None:
                return False
        return state in {3, 5, 6}

Golang 版算法实现


1 ) 方案1:正则

func isNumber(sStr string) bool {
	sStr = strings.TrimSpace(sStr)
	re := regexp.MustCompile(`^([+-]?\d+\.?\d*|[+-]?\d*\.?\d+)([eE][+-]?\d+)?$`)
	return re.MatchString(sStr)
}

2 ) 方案2:图 + 状态机

func isNumber(sStr string) bool {
	graph := map[int]map[string]int{
		0: {"blank": 0, "sign": 1, ".": 2, "digit": 6},
		1: {"digit": 6, ".": 2},
		2: {"digit": 3},
		3: {"digit": 3, "e": 4},
		4: {"digit": 5, "sign": 7},
		5: {"digit": 5},
		6: {"digit": 6, ".": 3, "e": 4},
		7: {"digit": 5},
	}
	state := 0
	for _, c := range strings.TrimSpace(sStr) {
		var charType string
		switch c {
		case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
			charType = "digit"
		case ' ':
			charType = "blank"
		case '+', '-':
			charType = "sign"
		case '.':
			charType = "."
		case 'e', 'E':
			charType = "e"
		default:
			return false
		}
		nextState, ok := graph[state][charType]
		if !ok {
			return false
		}
		state = nextState
	}
	return state == 3 || state == 5 || state == 6
}
GLM-5.1深度解析:AST感知、渐进压缩与Coding Plan工作流重构 大语言模型在代码生成任务中,已从单纯扩大参数量转向对编程本质的结构化建模。其核心在于理解抽象语法树(AST)、管理长上下文的智能压缩机制,以及将模型能力嵌入真实开发工作流的技术协议。GLM-5.1通过AST-aware分词器实现语义连贯的代码补全,借助渐进式上下文压缩支持20K+行级文件调试,并以Coding Plan为载体,封装CLI工具链、IDE协议适配与私有知识图谱注入,使模型真正成为可集成、可审计、可合规的工程组件。这种‘模型即工作流’范式,正推动AI编程从辅助走向协同,尤其适用于需要强规范性、高可 阅读详情

相关推荐

Kimi K2.5、GLM5、M2.7编程模型选型指南:按任务场景匹配

大语言模型在编程领域的应用已从通用能力走向深度专业化。理解‘代码大模型’的本质,需回归其底层技术定位:并非参数或榜单排名的比拼,而是推理架构、训练范式与工程接口的系统性差异。Kimi K2.5以超长上下文和跨文件逻辑建模见长,适合复杂系统重构与架构分析;GLM5聚焦编译器级语法校验与规范遵循,是代码质量保障与静态审查的理想选择;Minimax M2.7则为IDE实时交互而生,强调低延迟响应与光标位置敏感补全。三者分别对应‘结构理解’‘语义严谨’‘交互效率’三大技术价值,在金融系统迁移、教学辅助、生产环境调试

all00747的博客 390

保研机试准备

一 零碎知识 cin,cout速度会慢一点,如果输入 #include<iostream> //C++标准输入输出,cin/cout #include<cstdlib> #include<cstdio> //c标准输入输出,scanf/printf #include<algorithm> //常用算法,比如快速排序sort函数 #include<map><vector><string><set> //S

qq_37357873的博客 442

GLM-5.1登顶SWE-Bench Pro:开源大模型工程能力实战解析

大语言模型在软件工程任务中的实际效能,核心取决于缺陷定位精度、修复鲁棒性与长上下文理解能力。GLM-5.1凭借DSA稀疏注意力机制与200K上下文支持,在SWE-Bench Pro真实GitHub Bug修复榜单中以58.4分全球第一,显著优于Opus 4.6;其终端自治能力、代码生成质量及API性价比,已覆盖环境搭建、CI/CD审查、日志分析等高频开发场景。作为首个在硬性工程指标上站上全球榜首的中国开源模型,它标志着LLM从‘能写代码’迈向‘可交付生产级修复’的关键拐点。

weixin_33722405的博客 504

2026学生编程助手:懂课程、护隐私、降认知负荷的AI学习协作者

编程助手在教育场景中已从通用代码补全工具,演进为深度耦合教学逻辑的学习协作者。其核心原理在于将大语言模型的推理链转化为可视化的学习路径,通过课程上下文识别、错误共情诊断与本地化WASM推理等技术,显著降低学生的认知负荷。技术价值体现在提升调试效率、强化原理理解、保障校园环境兼容性(如零安装PWA、edu邮箱认证免费)及支持闭环验证能力。典型应用场景覆盖数学建模、前端面试准备、Java Web实验、数据结构实训等高度颗粒化的课程任务。本文聚焦‘cline编程助手’‘2026江西省数学建模’等真实热词所指向的学

weixin_30920513的博客 406

GLM-5.1登顶SWE-Bench Pro:开源代码大模型的工程化跃迁

代码大模型正从算法Demo走向真实软件工程交付,其核心能力已超越传统编程题求解,转向上下文缝合、跨文件推理与合规性生成等高阶任务。SWE-Bench Pro作为当前最严苛的软件工程评估基准,不再考察单点编码技巧,而是检验模型对AST语法结构、控制流约束及生产环境依赖链的理解深度。GLM-5.1通过多粒度代码表征融合与动态语义窗口机制,在真实GitHub Issue修复、PR评审辅助等场景实现质的突破;其全量开源策略(含权重、训练脚本与sweprobe评测框架)更首次支撑企业级可复现、可审计、可集成的代码助手

weixin_30326515的博客 414

DeepSeek-Coder实战指南:开源代码大模型本地部署与工程集成

代码大模型正从概念走向开发者的日常工具链,其核心价值在于对编程语义的深度建模与工程上下文的理解能力。DeepSeek-Coder并非单纯参数堆砌,而是通过定制化tokenizer、分层RoPE位置编码和代码结构头等架构设计,实现‘小而准’的代码生成效果。结合vLLM高性能推理、Ollama快速验证及VS Code深度集成,开发者可将模型落地为PR自动评审、低代码生成与研发Agent等真实场景。尤其在Java/Python工程中,它对函数签名、调用链与类型推断的支持显著优于通用大模型,但需警惕训练数据偏差与A

a304096740的博客 399

Qwen3.6-Plus:面向工程落地的国产编程模型深度解析

编程辅助模型正从‘代码补全’迈向‘工程意图理解’——这一技术演进本质是将大模型能力与真实开发场景深度耦合。其核心原理在于上下文感知增强、AST-aware语义建模与可验证代码契约机制,显著提升生成代码的可维护性、安全性与风格一致性。技术价值不仅体现为效率跃升,更在于降低工程决策成本、缩短PR评审周期、强化合规边界控制。典型应用场景覆盖IDE实时辅助、CI/CD智能守门、遗留系统现代化重构及多语言客户端自动生成。本文聚焦Qwen3.6-Plus这一国产编程模型在上下文感知与工程化落地方面的实践突破,解析其如何

weixin_30530939的博客 359

DeepSeek为何在代码与数学推理上碾压大模型

大模型能力并非单一维度的参数竞赛,而是资源密度、技术路径与场景聚焦的系统性博弈。当行业普遍追求通用泛化与全栈生态时,DeepSeek以MoE稀疏架构和垂直领域精耕为突破口,在代码理解与数学推理两大高价值切口实现工程级突破。其核心不在于‘更大’,而在于用窄带高纯数据、动态专家路由与AST级符号建模,将开源模型的实用上限推至极致——这正是当前AI落地中最稀缺的‘最后一公里’交付精度。本文深入解析其轻量化MoE实现、GitHub工业级清洗流水线与LaTeX AST微调范式。

weixin_33826609的博客 730

本地AI编程助手部署指南:DeepSeek-Coder+llama.cpp+Continue实战

本地大模型代码补全系统,是当前开发者规避云端依赖、保障代码隐私的核心技术路径。其原理基于轻量化开源代码大模型(如DeepSeek-Coder)在终端设备上的量化推理,依托llama.cpp等高效运行时实现低延迟响应,并通过VSCode插件(如Continue.dev)完成IDE深度集成。该方案的技术价值在于完全离线、可控可审计、无数据上传风险,适用于金融、政企等强合规场景。典型应用场景包括笔记本单机开发、内网隔离环境编码辅助、教学实验平台搭建及私有化AI研发中台建设。本文聚焦Windows平台下从零构建稳定

weixin_30607659的博客 394

GLM-4.7开源:面向CI/CD的生产级代码生成模型

生产级代码生成是AI工程化落地的核心命题,指模型输出的代码能直接通过静态检查、单元测试、安全扫描并融入CI/CD流水线。其本质依赖于对真实开发语境的理解——包括项目规范、工具链集成、依赖约束与团队治理要求。相比传统‘单轮生成’模型,新一代系统需支持规划-生成-验证-精炼的多阶段协同流程,并具备上下文感知、工具调用和可评估性等关键技术能力。GLM-4.7正是这一范式演进的典型代表,它将提示工程、项目上下文加载与ProdEval基准深度结合,使AI从‘代码草稿机’升级为可嵌入研发流程的数字协作者。

weixin_30470643的博客 351

AI编程辅助选型实战:Claude Code、DeepSeek-R1与Kimi工程化对比

AI编程辅助并非简单选择‘更强模型’,而是面向真实软件工程场景的技术适配问题。其核心在于理解大语言模型在代码生成、错误诊断、文档补全与跨文件重构等任务中的原理差异,以及上下文建模能力、token解析鲁棒性、延迟与成本约束等技术价值。在CI/CD集成、单元测试自动生成、遗留系统注释增强等典型应用场景中,不同模型因训练数据分布、推理优化策略和API服务设计而表现分化显著。本文基于6个落地项目经验与17次线上事故复盘,聚焦DeepSeek-R1、Claude Code和Kimi三者的工程级能力边界,揭示如何在响应

weixin_30376083的博客 409

数据结构与算法笔记:字典序最大问题分析

字典序最大问题 问题描述 给定一个1到n的排列(无序状态的),依次插入到栈中,在每时每刻都可以多次从栈中弹出栈顶 问:应如何使得弹出栈顶的序列的字典序最大,并输出这个序列 问题分析 什么是字典序 比如两个序列:5,4,3,2,1和1,2,3,4,5 这两个中第一个的字典序最大 每个位置上的数字比其他序列上同一位置的数字要大 比如:第一位置中5比1大,第二位置中4比2大这样 即:字典序最大 = 从左向右看这个序列,每个数字都尽量大 题目给定一个1到n的排列,每个数字只出现一次 要使出栈的字典序最大

Wang的专栏 4393

PyTorch模型工业级部署:ONNX+TensorRT嵌入式推理实战

机器学习模型部署不是调参终点,而是系统工程的起点。从PyTorch训练模型出发,需经ONNX格式中转、算子兼容性校验、TensorRT引擎构建、FP16精度与性能权衡等关键环节,最终落地于Jetson等边缘硬件。其核心原理在于脱离Python解释器、固化输入形状、预分配内存、绑定硬件资源,以换取确定性低延迟(如22±1.3ms)和高稳定性。技术价值体现在降低端侧推理开销、规避HTTP/JSON等非实时协议、适配工业PLC时序约束;典型应用场景包括AGV避障、智能仓储视觉检测、边缘实时目标识别等。本文聚焦Py

dezhen7015的博客 383

数据结构与算法笔记:农夫过河问题python3实现

问题描述 农夫(Human)过河。一个农夫带着一只狼(Wolf),一只羊(Sheep)和一些菜(Vegetable)过河。河边只有一条船,由于船太小,只能装下农夫和他的一样东西。在无人看管的情况下,狼要吃羊,羊要吃菜,请问农夫如何才能使三样东西平安过河? 要求: 输出一行,为最终的过河方式,方案格式为 过河人员、回来人员、过河人员、回来人员、…、过河人员。 过去和回来的人员之间,用空格隔开。 以四...

Wang的专栏 3374

CoffeeDeveloper:基于咖啡因节律的开发者个人生产力操作系统

在软件开发领域,'个人生产力系统'正从泛化的时间管理转向深度适配人类生物节律的技术实践。其核心原理在于利用咖啡因对腺苷受体的特异性阻断作用,触发前额叶皮层代谢提升与默认模式网络抑制,从而构建可测量、可复现的'认知启动窗口'。这一机制不仅揭示了生理节律与编码效率间的因果链,更衍生出抗干扰、可持续、低意志力依赖的技术执行范式。典型应用场景包括远程开发、独立SaaS交付、高复杂度模块重构等需要长时深度工作的任务。本文提出的CoffeeDeveloper系统,正是将神经科学参数(如45分钟起效窗口、体重校准剂量)与

世范水晶 427

DeepSeek-V4-Pro-Max在真实前端工程中的AI编程实践

AI编程是指利用大语言模型辅助软件开发全过程的技术范式,其核心在于对代码语义、运行时约束与工程上下文的深度建模。不同于LeetCode式评测,真实场景要求模型理解浏览器渲染帧率、WebSocket状态机、Canvas性能瓶颈等跨层约束,并能生成符合SOLID原则、兼容性规范与CI验证逻辑的可靠补丁。国产大模型DeepSeek-V4-Pro-Max凭借128K上下文建模能力、强类型Tool Calling意图翻译机制及架构级重构理解力,在十万行级协作图形系统中实现Bug修复一次通过、生产环境零指标异常。本文基

WGH100817的博客 324

数据结构与算法笔记:计算思维之经典农夫过河问题C++实现

农夫、羊、狼、菜的过河问题 问题描述 角色:农夫,羊,狼,菜 条件1:船很小,只能装下农夫和其他一个角色 条件2:无人看管,羊吃菜,狼吃羊 问:如何让其他三种角色被农夫平安带着过河? 相关分析 我们可以先用人脑尝试一下相关渡河策略 1 ) 先渡狼,人回来再渡菜,人回来再渡羊 2 ) 先渡菜,人回来再渡狼,人回来再渡羊 以上两种很好想到,而且我们可以知道羊这种角色是不能先渡河过去的,羊需要最后再渡 如果先渡了羊了,之后再渡任何其他角色,都要将羊带回来 可以参考小游戏:http://gameschool

Wang的专栏 3314

分享一个简单的迭代学习机器人双臂控制(MATLAB)

1 什么是迭代学习控制 迭代学习控制(iterative learning control,简称ILC)由Uchiyama于1978年首先提出,不过因为论文由日文撰写,影响不是很大。1984年,Arimoto等人用英文介绍了该方法。它是指不断重复一个同样轨迹的控制尝试,并以此修正控制律,以得到非常好的控制效果的控制方法。 迭代学习控制的特点是“在重复中学习”,通过反复的迭代修正,达到改善控制效果的目的。迭代学习控制的原理是根据系统前次运行所获得的输出误差信息,在控制过程中不断修正控制输入,随着迭代的进行,逐

weixin_45776027的博客 4489
上一篇: WebGL笔记:图形转面的原理与实现
下一篇: 数据结构与算法之图: LeetCode 417. 太平洋大西洋水流问题 (Ts, Py, Go版)
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值