Leetcode错题本1-实现一个 atoi 函数,使其能将字符串转换成整数。

2023-10-29

题目描述
请你来实现一个 atoi 函数,使其能将字符串转换成整数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:
如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0 。
提示:
本题中的空白字符只包括空格字符 ’ ’ 。
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 1:
输入: “42”
输出: 42
示例 2:
输入: " -42"
输出: -42
解释: 第一个非空白字符为 ‘-’, 它是一个负号。
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
示例 3:
输入: “4193 with words”
输出: 4193
解释: 转换截止于数字 ‘3’ ,因为它的下一个字符不为数字。
示例 4:
输入: “words and 987”
输出: 0
解释: 第一个非空字符是 ‘w’, 但它不是数字或正、负号。
因此无法执行有效的转换。
示例 5:
输入: “-91283472332”
输出: -2147483648
解释: 数字 “-91283472332” 超过 32 位有符号整数范围。
因此返回 INT_MIN (−231) 。

leetcode链接:https://leetcode-cn.com/problems/string-to-integer-atoi

题意分析
1、字符串转整数,因此,要用到以下的步骤:

string str = {'12345678'};
int num,;
int ans = 0;
for(int i = 0;i < str.length(); i++){
	nums = str[i] - '0';
	ans = ans * 10 + nums;
}

2、考虑边界情况

1、假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
2、 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231)

3、实现代码(这里使用的是C++,在必要的地方代码中有注释)

class Solution {
public:
    int myAtoi(string str) {
       const char *p = str.c_str(); // char* 形式传回 string 内含字符串
        for(; p != nullptr && *p == ' '; p++) {}  // 去除字符串中的“ ”
        if(p == nullptr || (*p != '+' && *p != '-' && (*p < '0' || *p > '9'))) {     //判断首个输入的字符是不是数字或者‘+’ ‘-return 0;
        }
        int res = 0, flag = 1;    //使用flag 作为正负的标记
        if(*p == '-') {
            flag = -1;
            p++;
        } else if(*p == '+') {
            p++;
        }
        int MAX = (((1 << 30)-1)<<1) + 1;   //使用位运算表示最大值 和最小值 
        int MIN = -MAX-1;
        for(; '0' <= *p && *p <= '9'; p++) {
            if((MAX-(*p-'0')) / 10 < res) {   // 如果直接用res *10 + *p-'0' > MAX 判断,会导致越界,程序无法运行,所以进行转换
                if(flag == -1) {
                    return MIN;
                } else {
                    return MAX;
                }
            }
            (res *= 10) += *p-'0';
        }
        return res * flag;

        
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode错题本1-实现一个 atoi 函数,使其能将字符串转换成整数。 的相关文章

  • EF Core 返回 null 关系,直到直接访问

    我有一些如下所示的模型 public class Mutant public long Id get set Relations public long OriginalCodeId get set public virtual Origi
  • 如何使用C从http下载文件?

    最近几天我试图弄清楚如何从 URL 下载文件 这是我对套接字的第一个挑战 我用它来了解协议 所以我想在没有 cURL 库的情况下只用 C 语言来完成它 我搜索了很多 现在我可以打印页面的源代码 但我认为这与文件不同 我不必只将接收到的数据从
  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • 如何从经过身份验证的 SecurityToken 中获取声明

    我将令牌作为字符串传递到 SOAP 服务中 并验证了该令牌是否有效 我现在有一个 SecurityToken 在调试模式下我可以看到所有声明 特别是我想传递到另一个方法的 userId 声明 我似乎不知道如何获得这些索赔 现在 我解码了令牌
  • 每个元素的 asp.net Web 表单自定义错误消息

    我创建了一个 Web 应用程序 表单 以及后端 SQL 插入和查询 目前我正在显示所有用户错误消息 div style padding 1em div
  • 我担心我添加了太多接口

    我正在构建我的领域模型并继续重构它 正如我所做的那样 我发现我喜欢接口 因为它允许我根据接口为具体类型创建可重用的方法 控制器 视图 但是 我发现每次向域实体之一添加新属性时 我都会创建一个接口 例如 我有一个会员状态从抽象继承的对象Ent
  • 如何在 C# 中以编程方式将行添加到 DataGrid?

    正如标题所述 我正在尝试使用 C 以编程方式将行添加到 DataGrid 但我似乎无法使其工作 这是我到目前为止所拥有的 I have a DataGrid declared as dg in the XAML foreach string
  • Windows Phone 7 - ScrollViewer 值已更改

    我一直在寻找解决方案 但无法找到正确的解决方案 我的网格宽度为 960 并且有ScrollViewer在里面 现在我想知道滚动时滚动的值 水平偏移 我找到的所有解决方案都是针对 wpf silverlight 的 它对我不起作用 Edit
  • 用于 C++ 中图像分析的 OpenCV 二进制图像掩模

    我正在尝试分析一些图像 这些图像的外部周围有很多噪声 但内部有一个清晰的圆形中心 中心是我感兴趣的部分 但外部噪声正在影响我对图像的二进制阈值处理 为了忽略噪音 我尝试设置一个已知中心位置和半径的圆形蒙版 从而使该圆之外的所有像素都更改为黑
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 使用 STL 流时如何格式化我自己的对象?

    我想将我自己的对象输出到 STL 流 但具有自定义格式 我想出了这样的东西 但由于我之前从未使用过 locale 和 imbue 所以我不知道这是否有意义以及如何实现 MyFacet 和operator 所以我的问题是 这是否有意义以及如何
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • MPI - 发送和接收列

    我需要从一个进程发送矩阵列并从另一个进程接收它 我尝试运行以下程序 但得到了一个奇怪的结果 至少我这么认为 仅复制矩阵的第一个元素 某些矩阵元素会发生意外变化 include
  • Windows Phone 的 JSON 反序列化

    我正在尝试反序列化以下 JSON 但我真的不知道如何使用 JSON net 来完成这项工作 我正在使用 C 和 JSON Net 库 我的 JSON 如下 found 3 bounds 43 54919 172 62148 43 54487
  • 为什么存在系统调用

    我一直在阅读有关系统调用及其在 Linux 中如何工作的内容 我还有更多的阅读要做 但我读过的一件事都没有回答 那就是 为什么我们需要系统调用 我知道系统调用是用户空间程序要求内核执行某些操作的请求 但我的问题基本上是 为什么用户空间程序本
  • 尝试后终于没有被调用

    由于某种原因 在我的控制台应用程序中 我无法运行我的finally 块 我编写这段代码是为了测试finally块是如何工作的 所以它非常简单 static void Main int i 0 try int j 1 i Generate a
  • 使用通用存储库模式和流畅的 nHibernate

    我目前正在开发一个中型应用程序 它将访问不同站点上的 2 个或更多 SQL 数据库等 我正在考虑使用类似的东西 http mikehadlow blogspot com 2008 03 using irepository pattern w
  • 稀疏矩阵超定线性方程组c/c++库

    我需要一个库来解决 Ax b 系统 其中 A 是一个非对称稀疏矩阵 每行有 8 个条目 而且可能很大 我认为实现双共轭梯度的库应该没问题 但我找不到一个有效的库 我尝试过 iml 但 iml sparselib 包中缺少一些标头 有小费吗
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que
  • 将同步 zip 操作转换为异步

    我们有一个现有的库 其中一些方法需要转换为异步方法 但是我不确定如何使用以下方法执行此操作 错误处理已被删除 该方法的目的是压缩文件并将其保存到磁盘 请注意 zip 类不公开任何异步方法 public static bool ZipAndS

随机推荐

  • FindObjectsOfType返回场景中所有该类型的组件集合

    做一个简单的demo 场景中准备七个空物体 层级关系如下 查找场景中所有出现的gggg组件 然后把test这个类挂在MainCamera这个物体上 然后运行场景 控制台打印结果为 3 总结 FindObjectsOfType返回场景中所有改
  • 测试产品说明书

    本篇文档是来自csdn 我觉得比较好 于是就收录了 尽管测试产品说明书不是所以软测人员都有机会去做 但还是值得一谈的 如果有幸在项目早期介入软件开发 并有一定的话语权的话 就相当有用了 在软件开发初始阶段发现软件缺陷将可能为项目节省大笔的开
  • 数据结构:队列Queue详解

    文章目录 一 队列的概念和特点 二 队列的使用 三 队列的简单实现 四 循环队列 一 队列的概念和特点 队列 只允许在一端进行插入数据操作 在另一端进行删除数据操作的特殊线性表 进行插入操作的一端称为队尾 删除操作的一端称队头 入队列 进行
  • 管理系统的设计与实现方法总结

    项目总结 1 项目开发背景 目前 国内外毕业论文选题一般采用两种方式 一种将毕业设计存在软盘上交 另一种则存放到教师的电脑上的一个共享目录内 但这两种方法都有各自的弊端 前一种方法不方便携带 速度慢 容量小 易损坏 后一种方法虽然解决了软盘
  • 关于互联网思维与技术团队的一些总结

    2017 7 4更 真正在底层工作的人员 跟站在高层的人看到的东西都是两个东西 真正的从底层走到高层才能看的更精准 同样的 从底层走到高层的人 也没有一直处在高层的远见与见识 我信奉公司处于什么阶段用什么样的人 没必要一开始就弄高精尖的人和
  • 基于Docker的Hadoop集群搭建

    基于Docker的Hadoop集群搭建 本文为在阿里云服务器上基于docker的Hadoop集群搭建 安装思路为 安装docker gt 运行docker导入ubuntu镜像 gt 运行ubuntu系统 gt 在系统中配置好单个节点 gt
  • FreeMarker整合Spring 3

    开发环境 System Windows WebBrowser IE6 Firefox3 JavaEE Server tomcat5 0 2 8 tomcat6 IDE eclipse MyEclipse 8 开发依赖库 JavaEE5 Sp
  • [QT编程系列-9]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自动布局

    目录 3 QT窗体设计 3 7 自动布局 3 7 1 自动布局 3 7 2 在主窗口中自动布局 3 7 3 在自动布局容器中自动布局 3 7 4 在widget中自动布局 3 7 5 自动布局工件 3 QT窗体设计 3 7 自动布局 3 7
  • 基于单片机火灾报警器仿真设计

    一 系统方案 1 本设计采用51单片机作为主控器 2 DS18B20采集温度值送到液晶1602显示 3 MQ2采集烟雾值 送到液晶1602显示 4 按键设置温度报警值 大于报警值 声光报警 二 硬件设计 原理图如下 三 单片机软件设计 1
  • qt ×掉子窗口后,进程还没有停止的问题

    掉子窗口后 子窗口还在接受数据的问题 当子窗口显示时 先关闭父窗口 调用的先后顺序为 当子窗口显示时 先关闭子窗口 调用的先后顺序为 找到原因 此时子窗口的析构函数没有执行 解决方案 先说解决方案 给子窗口设置以下属性 setAttribu
  • UE4 去掉自动曝光(光线自适应)

    UE4在没有PostprocessingVolumn时 会在场景中加入自动曝光 有时会导致过亮或者过暗 解决方法 关闭ProjectSetting Rendering DefaultSetting中的AutoExposure 自动曝光 在场
  • CentOS安装错误:no default or ui configuration

    靠 以后再也不用浏览器自带的下载工具下载镜像文件了 原来是下载的不完整 但是显示完全下载完毕了 真特么误导人 文件的checksum不对 references https www centos org forums viewtopic ph
  • c++11 pod类型(了解)

    c 11 pod类型 了解 啥是POD类型 POD全称Plain Old Data 通俗的讲 一个类或结构体通过二进制拷贝后还能保持其数据不变 那么它就是一个POD类型 平凡的定义 1 有平凡的构造函数 2 有平凡的拷贝构造函数 3 有平凡
  • ReactHook EffectHook

    副作用操作 使得函数组件能够进行生命周期的操作 可以有多个 类组件中相同的生命周期会进行覆盖 会在 可以看作是以下生命周期函数的结合 componentDidMount componentDidUpdate 和 componentWillU
  • MR应用开发 —— Hadoop权威指南10

    1 Configuration Hadoop的配置API 之前 在获取Hadoop文件实例时 经常会创建一个Configuration实例 Configuration是Hadoop用于配置的API 是property和value的集合 ad
  • centos系统elasticseach安装

    Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎 一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎 当然 Elasticsearch 并不仅仅是 Lucene 那么简单 它不仅包括了全文搜索功能 还可以
  • Python堆积条形图、双轴图、多子图、圆圈热力图示例

    准备工作 使用Python绘图首先需要导入需要的库 并确保中文和负号的正常显示 import os import xlrd import pandas as pd import numpy as np import matplotlib p
  • 了解在Linux系统下不同Shell介绍以及切换

    了解在Linux系统下不同Shell介绍以及切换 引言 在Linux系统中 Shell是用户与操作系统内核之间的接口 它是一个命令行解释器 用于执行用户输入的命令并与操作系统进行交互 在Linux中 常见的Shell包括zsh bash f
  • 用js实现二分查找法

    二分查找法 二分查找也称折半查找 Binary Search 它是一种效率较高的查找方法 但是 折半查找要求线性表必须采用顺序存储结构 而且表中元素按关键字有序排列 function binarySearch arr target let
  • Leetcode错题本1-实现一个 atoi 函数,使其能将字符串转换成整数。

    题目描述 请你来实现一个 atoi 函数 使其能将字符串转换成整数 首先 该函数会根据需要丢弃无用的开头空格字符 直到寻找到第一个非空格的字符为止 接下来的转化规则如下 如果第一个非空字符为正或者负号时 则将该符号与之后面尽可能多的连续数字