当前位置: 首页 > news >正文

LeetCode 第8题:字符串转换整数 (atoi)

题目描述

请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个32位有符号整数。函数myAtoi(string s)的算法需要按照以下步骤:

  1. 读入字符串并丢弃无用的前导空格
  2. 检查下一个字符是否为正负号,读取该字符(如果有)
  3. 读取数字字符,直到遇到非数字字符或到达字符串末尾
  4. 将前面读入的字符转换为整数,如果没有读入数字,则值为0
  5. 如果整数超过32位有符号整数范围[-2^31,2^31 -1],需要截断这个整数

难度:中等

题目链接:8. 字符串转换整数 (atoi) - 力扣(LeetCode)

示例一:

输入:s = "42"
输出:42
解释:
第 1 步:"42"(当前没有读入字符,因为没有前导空格)
第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
第 3 步:"42"(读入 "42")

 示例二:

输入:s = "   -42"
输出:-42
解释:
第 1 步:"   -42"(读入前导空格,但忽视掉)
第 2 步:"   -42"(读入 '-' 字符,所以结果应该是负数)
第 3 步:"   -42"(读入 "42")

示例三:
 

输入:s = "4193 with words"
输出:4193
解释:转换截止于数字 '3' ,因为它的下一个字符不为数字

提示

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

方法:模拟法

 注意点:

  • 状态机思想:
  1. 处理空格状态
  2. 处理符号状态
  3. 处理数字状态
  4. 处理结束状态
  • 边界处理:
  1. 整数范围检查
  2. 符号处理
  3. 非法字符处理
  • 溢出处理
  1. 在加入新的数字前检查是否会溢出
  2. 使用long类型暂存结果

时间复杂度:O(n),其中n是字符串长度。

空间复杂度:O(1)。

public class Solution  //读题得最终转换为一个数字
{public int MyAtoi(string s){int i=0,n=s.Length;while(i<n && s[i]==' ')  i++;  //如果是空格,跳过int sign=1;if(i<n && s[i] == '+' || s[i] =='-'){sign = s[i] =='+' ? 1:-1;//定义加减符号,加号为1,减号为-1i++;}long result = 0;while(i<n && char.IsDigit(s[i])){result = result*10+(s[i]-'0');//考虑了进位10,然后后续加数\\处理溢出if(sign==1 && result >int.MaxValue)   return int.MaxValue;if(sign==-1  && result<int.MinValue)  return int.MinValue;i++;}return (int)(sign*result);}}


http://www.mrgr.cn/news/94389.html

相关文章:

  • 个性化音乐推荐系统
  • 【菜鸟飞】通过vsCode用python访问公网deepseek-r1等模型(Tocken模式)
  • onnxruntime-gpu与cuda版本对应及是否能调用cuda测试
  • C盘清理技巧分享:释放空间,提升电脑性能
  • 色板在数据可视化中的创新应用
  • vue3 中使用 Recorder 实现录音并上传,并用Go语言调取讯飞识别录音(Go语言)
  • Xxl-Job学习笔记
  • python学习笔记-mysql数据库操作
  • excel中两个表格的合并
  • 网络通信(传输层协议:TCP/IP ,UDP):
  • 【MySQL】基本操作 —— DDL
  • django框架 [面试篇]
  • 基于Redis实现限流
  • Pytorch实现之BCGAN实现双生成器架构的人脸面部生成
  • Interview preparation.md
  • Redis 2025/3/9
  • 整合记录-持续
  • oracle11.2.0.4 RAC 保姆级静默安装(二) DB数据库软件
  • ES 使用geo point 查询离目标地址最近的数据
  • 【lf中的git实战】(我的代码合并到别人那用squash,别人合我这不用!!!)