数据结构与算法之字符串: LeetCode 8. 字符串转换整数 (atoi) (Ts版)

本题要求提取一个字符串中的所有数字字符(‘0‘……‘9‘),将其转换为一个整数输出。 其实这道题目并没有那么的难,很基础。但是由于我的马虎,没有按照题目的要求来写,导致我耗费了一定的时间。我一开始没有仔细看题目,然后第一想法就是找到字符串中的数字字符然后直接打印出来,代码如下。本题要求提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。所以说各位老铁们还是要认真读题,不要像我一样出这样的低级错误。今天遇到了一道题,我觉得很有意义,所以写下来记录一下。之后提交的时候才发现需要将其转换为一个整数输出。最后,做一个小小的总结。 阅读详情

字符串转换整数 (atoi)

描述

  • 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。

  • 函数 myAtoi(string s) 的算法如下:

    • 空格:读入字符串并丢弃无用的前导空格(" ")
    • 符号:检查下一个字符(假设还未到字符末尾)为 '-' 还是 '+'。如果两者都不存在,则假定结果为正
    • 转换:通过跳过前置零来读取该整数,直到遇到非数字字符或到达字符串的结尾。如果没有读取数字,则结果为0
    • 舍入:如果整数数超过 32 位有符号整数范围 [− 2 31 2^{31} 231, 2 31 2^{31} 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 − 2 31 2^{31} 231 的整数应该被舍入为 − 2 31 2^{31} 231 ,大于 2 31 2^{31} 231 − 1 的整数应该被舍入为 2 31 2^{31} 231 − 1
  • 返回整数作为最终结果

示例 1

输入:s = "42"
输出:42

示例 2

输入:s = " -042"
输出:-42

示例 3

输入:s = "1337c0d3"
输出:1337

示例 4

输入:s = "0-1"
输出:0

示例 5

输入:s = "words and 987"
输出:0

解释:读取在第一个非数字字符“w”处停止

提示

  • 0 <= s.length <= 200
  • s 由英文字母(大写和小写)、数字(0-9)、' '、'+'、'-' 和 '.' 组成

Typescript 版算法实现


1 ) 方案1:自动机

class Automaton {
    private state: string = "start";
    private table: { [key: string]: string[] } = {
        "start": ["start", "signed", "in_number", "end"],
        "signed": ["end", "end", "in_number", "end"],
        "in_number": ["end", "end", "in_number", "end"],
        "end": ["end", "end", "end", "end"]
    };

    public sign: number = 1;
    public ans: number = 0;

    private get_col(c: string): number {
        if (c === ' ') return 0;
        if (c === '+' || c === '-') return 1;
        if (!isNaN(parseInt(c, 10))) return 2;
        return 3;
    }

    public get(c: string): void {
        this.state = this.table[this.state][this.get_col(c)];
        if (this.state === "in_number") {
            this.ans = this.ans * 10 + parseInt(c, 10);
            // 检查是否超出32位有符号整数范围
            if (this.sign === 1) {
                this.ans = Math.min(this.ans, 2147483647); // INT_MAX
            } else {
                this.ans = Math.min(this.ans, 2147483648); // -INT_MIN
            }
        } else if (this.state === "signed") {
            this.sign = c === '+' ? 1 : -1;
        }
    }
}

function myAtoi(str: string): number {
    const automaton = new Automaton();
    for (const c of str) {
        automaton.get(c);
    }
    return automaton.sign * automaton.ans;
}

2 ) 方案2:基于特殊符号特殊处理

function myAtoi(s: string): number {
    let res = 0;
    const bndry = Math.floor(Number.MAX_SAFE_INTEGER / 10);
    let i = 0;
    let sign = 1;
    const length = s.length;

    if (length === 0) return 0;

    // Skip leading whitespace
    while (s.charCodeAt(i) === 32) {
        if (++i === length) return 0;
    }

    // Handle sign
    if (s.charCodeAt(i) === 45) {
        sign = -1;
    } else if (s.charCodeAt(i) === 43) {
        // Do nothing for positive sign
    }
    if (s.charCodeAt(i) === 45 || s.charCodeAt(i) === 43) {
        i++;
    }

    // Process digits
    for (let j = i; j < length; j++) {
        const charCode = s.charCodeAt(j);
        if (charCode < 48 || charCode > 57) {
            break;
        }
        const digit = charCode - 48;

        if (res > bndry || (res === bndry && digit > 7)) {
            return sign === 1 ? Number.MAX_SAFE_INTEGER : Number.MIN_SAFE_INTEGER;
        }

        res = res * 10 + digit;
    }

    return sign * res;
}
  • 这个方案有精度问题
  • 对大部分case都可以通过
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。 // 函数 myAtoi(string s) 的算法如下: // 读入字符串并丢弃无用的前导空格 // 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 // 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 // 将前面步骤读入的这些数字 阅读详情

相关推荐

Python int 深度解析:小整数缓存、任意精度内存结构与运算陷阱

Python 的 int 类型并非简单的数学整数或C语言int,而是一个融合对象模型、动态内存分配与语义契约的复合体。其底层基于 ob_digit 数组实现任意精度,通过小整数缓存(-5~256)优化对象复用,但引发 is/== 误用风险;整除//与取模%遵循地板除法,保障模运算一致性;int() 构造函数对浮点数截断而非四舍五入,易在金融与计数场景埋下隐患。理解其内存增长规律(sys.getsizeof)、位运算语义(~x == -(x+1))及类型提升规则,是编写健壮、高性能Python代码的基础能力。

weixin_33701617的博客 434

字符转换-PTA

本题要求提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串。 输出格式: 在一行中输出转换后的整数。题目保证输出不超过长整型范围。 输入样例: free82jeep5 输出样例: 825 解析:遍历输入的字符串,把字符串中的数字筛选出来 int main() { char str[81] = { 0 }; gets(str); int count = 0; for (int i

Mr.Xiwen博客 1万+

GLM-5.1实战指南:国产大模型如何支撑生产级AI编程

AI编程正从‘能写代码’迈向‘可交付代码’的关键阶段。其核心在于模型对真实工程场景的理解能力——不仅需掌握语法与算法(如HumanEval基准),更需建模上下文依赖、跨语言协同、安全合规等隐性知识。GLM-5.1通过CodeGraph知识图谱深度融入百万级开源项目决策逻辑,在遗留系统重构、接口对齐、合规审计等企业高频场景中展现强实用性。它不追求通用NLP指标的绝对领先,而是以‘可嵌入CI/CD’‘可直合主干’‘可过AST验证’为技术标尺,将AI编程从评测幻觉拉回工程现实。本文聚焦GLM、Claude等主流模

376

实验7-3-7 字符转换 (15分)

本题要求提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串。 输出格式: 在一行中输出转换后的整数。题目保证输出不超过长整型范围。 输入样例: free82jeep5 输出样例: 825 分析:这一题可以分为几个步骤 第一步是获取所有的输入存到数组,第二步是将输入初步处理,得到所有的数字字符存到另外一个数组,第三步是将数字字符转化为整数后输出。因此,可写代码如下: #include &

青羚 3304

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01

当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。

weixin_49199313的博客 1277

Vite与Webpack路径配置大不同:从Vue2迁移到Vue3必须知道的public目录使用技巧

本文详细解析了Vite与Webpack在public目录路径配置上的核心差异,为Vue2迁移到Vue3的开发者提供实用指南。重点对比了两种构建工具的资源处理逻辑,给出典型编译警告的解决方案,并分享路径适配表与高级优化技巧,帮助开发者高效完成技术栈升级。

weixin_30836759的博客 485

数组-01. 字符转换(15)

本题要求提取一个字符串中的所有数字字符(’0’……’9’),将其转换为一个整数输出。输入格式:输入在一行中给出一个不超过80个字符且以回车结束的字符串。输出格式:在一行中输出转换后的整数。题目保证输出不超过长整型范围。输入样例: free82jeep5 输出样例: 825#include<stdio.h> int main(){ char str[81]; int i=0 ;

随笔 566

DevExpress学习之GridControl导入导出至EXCEL

导出: private void EXCELout_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Title = "导出Excel"; saveFileDialog.Filter = "Excel文件(*.xls)|*.xls";

I Can -Jiang 2755

手写atoi详解:C语言字符串转整数的底层实现与工业级实践

atoi是C语言中字符串转整数的基础函数,其本质是ASCII字符到二进制整型的映射过程,涉及字符识别、符号处理、十进制累加和整数溢出控制等核心原理。理解其实现机制,有助于掌握C语言‘零抽象’特性与内存安全边界,提升嵌入式开发、裸机编程及系统级代码健壮性。工业级实现需规避标准库依赖(如-nostdlib场景),精准复现POSIX行为(前导空格跳过、符号解析、非法字符截断、静默溢出截断),并支持跨平台验证(x86/ARM)。本文以可运行代码为载体,深入剖析atoi四阶段逻辑链,覆盖面试高频考点与真实项目痛点。

weixin_34195546的博客 388

Qt Installer Framework4.6.1的最基础使用1(win10+离线安装包 )

因工作需要,win程序发布后,打包成一可执行exe文件,且兼容win7系统笔者记录了一些关键要点,供有需要的小伙伴使用。

aggs1990的专栏 904

2025趋势:经济学研究中AI多智能体系统的6大架构方向(AI应用架构师必藏)

多智能体系统(MAS)由多个相互作用的智能体组成,每个智能体具备自主决策能力、感知环境的能力和与其他智能体通信的能力。微观行为的精细化建模:智能体可被赋予异质的偏好函数、信息集和决策规则,模拟真实市场的多样性动态交互的涌现性分析:通过智能体间的局部互动(如交易、合作、竞争),观察宏观经济现象的涌现过程反事实政策实验:在虚拟环境中安全测试极端政策(如负利率、全民基本收入)的连锁反应实时自适应调整:智能体可通过机器学习持续优化策略,模拟经济系统的演化特性。

AI 领航者的博客 1425

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

部分有效数字列举如下:[“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。3 )邻接表(图)标识的状态机。

Wang的专栏 326

YOLOv8源码解析与复现:ShuffleAttention:高效的混合注意力机制 实现通道和空间混合注意力

随着深度学习在计算机视觉领域的飞速发展,卷积神经网络(CNNs)已经成为图像分类、目标检测、语义分割等任务的核心。为了进一步提升模型的性能,研究者们引入了“注意力机制”,旨在让网络能够动态地关注输入数据中最具信息量的部分。经典的注意力模块,如SE-Net(Squeeze-and-Excitation Networks)和CBAM(Convolutional Block Attention Module),通过通道注意力或结合通道与空间注意力,显著增强了模型的特征表达能力。

FJN110的博客 555

力扣刷题总结-字符串翻转

1、给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 ...

weixin_40966030的博客 500

智能硬件产品:做好一款电子硬件产品,工具必不可少

上到战略规划,中至运营策略,下至人性洞察,。最初做产品时,笔者从一开始就陷入到了对工具的痴迷,包括:PS、AutoCAD、PROE、犀牛、Axure、Keyshot、Altium……大概将 2 个多月的时间和精力都消耗在了学习使用工具上。通过工具的运用也确实提高了工作效率,在仅有创意的前提下通过灵活运用工具,一年内便成功申请了多个实用新型专利、设计了多款产品的高保真原型图等。正在上传…重新上传取消。

产品线负责人 1445

SAP FICO CBS接口-银企直连付款平台功能开发说明书(包括测试样例、FS)

SAP FICO CBS接口-银企直连付款平台功能开发说明书(包括测试样例、FS)

我好像病了的博客 2450

重建DSA学习系统:从内存模型到数据生命周期的三维训练法

数据结构与算法(DSA)本质是程序对数据的组织、处理与管理方式,其核心原理根植于计算机体系结构——包括内存布局、CPU缓存行为、指针运算机制及垃圾回收策略。理解哈希表O(1)均摊查询背后的哈希冲突与扩容代价,掌握快排在小数组中被插入排序反超的常数因子影响,是突破刷题瓶颈的关键。这类技术价值体现在真实系统设计中:如LFU缓存需协同双向链表与哈希表实现O(1)操作,实时热搜榜依赖环形缓冲区、并发哈希表与最小堆的跨结构协作。本文聚焦‘数据生命周期’视角,覆盖创建(内存分配)、流转(数据流图建模)、消亡(释放与GC

weixin_30781107的博客 471

海康威视嵌入式最全面试题及参考答案(3万字长文)

主营业务:提供包括前端摄像头、后端存储设备、显示控制设备等在内的全方位视频监控解决方案。市场地位:在全球范围内享有较高的市场份额,在安防领域具有较强的竞争力。技术创新:持续投入研发,拥有多项核心技术和专利,特别是在视频处理算法、人工智能等方面取得了显著成果。社会责任:积极参与公共安全项目,为智慧城市、交通管理等领域提供技术支持和服务。国际业务:除了国内市场外,海康威视的产品和服务也销往全球多个国家和地区。面向对象编程。

大模型大数据攻城狮的专栏 1765

蓝桥杯国赛B组题解:从多维背包到动态规划实战

动态规划是解决最优化问题的核心算法思想,其本质是通过状态定义和状态转移,将复杂问题分解为重叠子问题,从而避免重复计算。在算法竞赛和工程实践中,动态规划常用于资源分配、路径规划、序列比对等场景。多维费用背包是动态规划的经典变种,它扩展了传统背包问题,能够处理多种资源约束下的价值最大化问题,在任务调度、投资组合等实际应用中具有重要价值。本文以蓝桥杯国赛典型题目为例,深入解析多维背包问题的状态设计、转移方程和实现细节,并探讨其与暴力搜索、贪心算法的关联,帮助读者掌握从问题识别到算法实现的完整路径。

weixin_33787529的博客 742

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

《商业数据分析师MySQL结丹教程》

本文介绍了MySQL在商业数据分析中的应用,重点针对人力资源和财务数据仓库的三层架构(ODS/DWD/ADS)。第一章详细讲解了SQL逻辑执行顺序(FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY→LIMIT)及其在ETL过程中的应用场景,包括基础查询、运算符使用、NULL值处理和分页优化。第二章强调数据类型选择对数据精度和性能的影响,特别指出数值类型在HR/财务系统中的重要性。全文结合具体业务场景示例,为数据分析师提供从SQL基础到数据仓库建模的实用指导。

yourkind的博客 474

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

通义灵码深度集成指南:从网页版到企业级AI编程工作流

AI编程助手正从代码补全工具演进为理解上下文、融合知识、编排开发流程的智能体。其核心原理在于三层协同:基于AST的代码感知引擎实现强类型精准补全,企业知识中枢支持私有API与规范注入,开发行为编排器打通IDE、Git与CI/CD。技术价值体现在将隐性经验显性化、机械劳动自动化、质量管控左移。典型应用场景包括Spring Boot项目中的上下文感知生成、Git提交自动合规、单元测试一键覆盖,以及金融/医疗等强监管领域本地化部署。本文聚焦通义灵码官网集成路径与VS Code深度调优实践,解决私有依赖解析、风格强

weixin_30732487的博客 1282

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

7-7 字符转换 (15 分)

本题要求提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串。 输出格式: 在一行中输出转换后的整数。题目保证输出不超过长整型范围。 输入样例: free82jeep5 结尾无空行 输出样例: 825 结尾无空行 我的代码: #include<stdio.h> #include<string.h> int main(){ int i,len,sum

fan_heng的博客 2401

2021-03-23

本题要求提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串。 输出格式: 在一行中输出转换后的整数。题目保证输出不超过长整型范围。 输入样例: free82jeep5 输出样例: 825 a = input() b = [] for i in a: if i.isdigit(): b.append(i) print(int("".join(b))) 思路:...

weixin_51768203的博客 987

字符转换 提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。 首位不能是0

7-3字符转换(13分) 本题要求提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串。 输出格式: 在一行中输出转换后的整数。题目保证输出不超过长整型范围。 输入样例: free82jeep5 输出样例: 825 #include <stdio.h> #...

c_lanxiaofang的博客 3万+

【题解】【PTA-Python题库】第3章-5 字符转换 (15 分)

字符转换 本题要求提取一个字符串中的所有数字字符(‘0’……‘9’),将其转换为一个整数输出。 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串。 输出格式: 在一行中输出转换后的整数。题目保证输出不超过长整型范围。 输入样例: free82jeep5 输出样例: 825 思路: 判断数字加到列表。 代码如下: a = input() b = [] for n in a : ...

葑鈊丶 1万+

c++实现atoi【string转成整数或者浮点数】

6、code class Solution { public: int myAtoi(string str) { const char *p = str.c_str(); for(; p != nullptr && *p == ' '; p++) {} if(p == nullptr || (*p != '+' && *p != '-' && (*p < '0' || *p > '9')))

Tlwhisper的博客 423
上一篇: 数据结构与算法之排序: LeetCode 937. 重新排列日志文件 (Ts版)
下一篇: 数据结构与算法之动态规划: LeetCode 2050. 并行课程 III (Ts版)
Wang's Blog
博客等级 码龄12年 7433粉丝 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、付费专栏及课程。

余额充值