当前位置: 首页 > 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,减号为-1
            i++;
        }

        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);
     }

}

相关文章:

  • 【最后203篇系列】016 Q201架构思考
  • vue 导航跳转created不执行,页面不刷新的解决办法
  • Web自动化测试框架
  • 虚拟电商-数据库分库分表(二)
  • CockroachDB MCP -cursor适用
  • 搞定python之六----文件读写
  • 基于深度学习的蛀牙智能检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】
  • Vue2+Vant2 项目初学
  • 计算机是如何工作的
  • DeepSeek 本地化新篇章:Ollama 兼容 OpenAI API 的深度解析与部署实践
  • 【DeepSeek】本地部署DeepSeek的完整教程(Ollama+Docker+Open WebUI)
  • 程序化广告行业(18/89):交易模式与关键概念解析
  • 多线程到底重不重要?
  • Qt 绘图
  • 在线 SQL 转 Python ORM工具
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_10空状态的固定表头表格
  • 【Git学习笔记】Git结构原理及其分支管理模型分析
  • 抽象工厂模式
  • python报错: AttributeError: module ‘clr‘ has no attribute ‘AddReference‘
  • Browser Copilot 开源浏览器扩展,使用现有或定制的 AI 助手来完成日常 Web 应用程序任务。
  • 伊朗外长:伊美第四轮间接谈判将于5月3日举行
  • 市场监管总局出手整治涉企乱收费,聚焦政府部门及下属单位等领域
  • 原国家有色金属工业局副局长黄春萼逝世,享年86岁
  • 巴西外长维埃拉:国际形势日益复杂,金砖国家必须发挥核心作用
  • 新华保险一季度净赚58.82亿增19%,保费收入增28%
  • 李在明涉嫌违反《公职选举法》案将于5月1日宣判