LeetCode 8 字符串转整数

题目描述

字符串转换整数 (atoi)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

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

  1. 读入字符串并丢弃无用的前导空格
  2. 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  4. 将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
  5. 如果整数数超过 32 位有符号整数范围 [−2^31, 2^31 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −2^31 的整数应该被固定为 −2^31 ,大于 ^231 − 1 的整数应该被固定为 2^31 − 1
  6. 返回整数作为最终结果。

注意:

  • 本题中的空白字符只包括空格字符 ' '
  • 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

示例 1:

输入:s = "42"
输出:42
解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
第 1 步:"42"(当前没有读入字符,因为没有前导空格)^
第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')^
第 3 步:"42"(读入 "42")^
解析得到整数 42 。
由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42 。

示例 2:

输入:s = "   -42"
输出:-42
解释:
第 1 步:"   -42"(读入前导空格,但忽视掉)^
第 2 步:"   -42"(读入 '-' 字符,所以结果应该是负数)^
第 3 步:"   -42"(读入 "42")^
解析得到整数 -42 。
由于 "-42" 在范围 [-2^31, 2^31 - 1] 内,最终结果为 -42 。

示例 3:

输入:s = "4193 with words"
输出:4193
解释:
第 1 步:"4193 with words"(当前没有读入字符,因为没有前导空格)^
第 2 步:"4193 with words"(当前没有读入字符,因为这里不存在 '-' 或者 '+')^
第 3 步:"4193 with words"(读入 "4193";由于下一个字符不是一个数字,所以读入停止)^
解析得到整数 4193 。
由于 "4193" 在范围 [-2^31, 2^31 - 1] 内,最终结果为 4193 。

提示:

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

解法

主要有两点,一个是如何判断数字的各种边界,一个是如何判断是否越界(是否在范围 [-2^31, 2^31 - 1] 内)。

判断是否越界可以使用数学方法,可参考第7题:LeetCode 7 整数反转

java代码:

class Solution {public int myAtoi(String s) {// 符号,默认为正int sign = 1;// 是否有有效数字了,(即是否遇到了符号或数字)因为符号后遇到非数字字符也结束boolean hasEle = false;// 结果int res = 0;// 遍历字符串for (int i = 0; i < s.length(); i++) {// 确定第一个符号if (!hasEle) {if (s.charAt(i) == 45) {sign = -1;hasEle = true;continue;} else if (s.charAt(i) == 43) {hasEle = true;continue;}// 前面的空格跳过if (s.charAt(i) == 32) {continue;}}// 遇到非数字,结束循环if (s.charAt(i) < 48 || s.charAt(i) > 57) {break;}// 遇到数字则加入计算if (s.charAt(i) >= 48 && s.charAt(i) <= 57) {int digit = Character.getNumericValue(s.charAt(i));// 检查是否越界:if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && digit > 8)) {return Integer.MIN_VALUE;}if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && digit > 7)) {return Integer.MAX_VALUE;}// 计算下一个结果,注意符号的使用res = res * 10 + sign * digit;hasEle = true;}}return res;}
}

复杂度

时间复杂度:O(n),n为字符串长度
空间复杂度:O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决woocommerce产品方面遇到的小问题记录

问题1.通过自定义代码在woocommerce的任意一个产品的价格下面&#xff0c;加上一段文字 id&#xff0c;换成你自己的产品id&#xff0c;div里面的文字换成你自己的自定义文字&#xff0c;代码是加在function.php里面的哦 //添加文字产品价格下面 function insert_custom_cont…

SpringMVC利用@ControllerAdvice和ResponseBodyAdvice接口统一处理返回值

在我们进行Java的Web应用开发时&#xff0c;如何写更少的代码&#xff0c;做更多的事情。如何让开发更容易上手&#xff0c;更专注于业务层面&#xff0c;不需要太关心底层的实现。这里就分享一些我平时在搭建基础框架时候的一些心得体验。 统一处理返回值 在web应用中&#x…

集成开发环境 PyCharm 的安装【侯小啾python领航班系列(二)】

集成开发环境PyCharm的安装【侯小啾python领航计划系列(二)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

《YOLOv5原创自研》专栏介绍 CSDN独家改进创新实战专栏目录

YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html &#x1f4a1;&#x1f4a1;&#x1f4a1;全网独家首发创新&#xff08;原创&#xff09;&#xff0c;适合paper &#xff01;&#xff01;&#xff01; &#x1f4a1;&#x1f4a1;&#x1f4a1;…

Vue3中的组合式API的详细教程和介绍

文章目录 前言介绍组合式 API 基础setup 组件选项 带 ref 的响应式变量生命周期钩子注册内部 setupwatch 响应式更改独立的 computed 属性后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;vue.js &#x1f431;‍&#x1f453;博主在前端…

PID控制

在PID控制中&#xff0c;输出通常是一个控制量&#xff0c;而不是直接的PWM占空比。输出的具体含义可以根据具体的系统和应用而变化。在这段代码中&#xff0c;PID控制器的输出是 output_calc。 而 CCR_duty 是控制施肥系统的PWM占空比&#xff0c;这是通过PID控制的输出和曲线…

西南科技大学(数据结构A)期末自测练习五

一、选择题&#xff08;每空 1 分&#xff0c;共 5 分&#xff09; 1、下面关于图的叙述中&#xff0c;正确的是&#xff08; &#xff09;。 (1)&#xff0e;回路是简单路径 (2)&#xff0e;存稀疏矩阵&#xff0c;用邻接矩阵比邻接表更省空间 (3)&#xff0e;若有像图中存在…

实验 elk+filebeat+kafka

kafka 3.4.1 elkfilebeatkafka 实现日志收集 httpd1 mysql1 topic 2.7 3.0 关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0 安装 JDK yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel java -version 安装 Zookeeper cd /…

FL Studio2024重磅更新 带你了解FL21.2最新版本功能

FL Studio2024是功能强大的音乐制作解决方案&#xff0c;使用旨在为用户提供一个友好完整的音乐创建环境&#xff0c;让您能够轻松创建、管理、编辑、混合具有专业品质的音乐&#xff0c;一切的一切都集中在一个软件中&#xff0c;只要您想&#xff0c;只要您需要&#xff0c;它…

设计模式---第四篇

系列文章目录 文章目录 系列文章目录前言一、说说策略模式在我们生活的场景?二、知道责任链模式吗?三、了解过适配器模式么?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给…

Qt实现右键菜单

一、实现方法 QWidget提供了虚函数: virtual void contextMenuEvent(QContextMenuEvent*event);覆写该函数&#xff0c;即可。 二、Example 创建一个基本的mainwindow项目&#xff0c; 头文件&#xff1a; class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWin…

for循环定义域问题

记录一个偶然发现的问题&#xff0c;代码如下 int main(int argc, char *argv[], char *envp[]){for(int i 1; i < 10; i);printf("%d",i); return 0; } 可以看到for循环后加了一个分号&#xff0c;按理说应该报变量i未定义的错误&#xff0c;但此时在编译器中…

详细学习PyQt5与数据库交互

Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图&#xff08;Item View&#xff09; 快速弄懂Pyqt5的4种项目部件&#xff08;Item Widget&#xff09; 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…

山西电力市场日前价格预测【2023-12-02】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-02&#xff09;山西电力市场全天平均日前电价为373.22元/MWh。其中&#xff0c;最高日前电价为765.50元/MWh&#xff0c;预计出现在17:45。最低日前电价为187.48元/MWh&#xff0c;预计…

(11_29)畅捷通的 Serverless 探索实践之路

作者&#xff1a;计缘 畅捷通介绍 畅捷通是中国领先的小微企业财税及业务云服务提供商&#xff0c;成立于2010年。畅捷通在2021年中国小微企业云财税市场份额排名第一&#xff0c;在产品前瞻性及行业全覆盖方面领跑市场&#xff0c;位居中国小微企业云财税厂商矩阵领军象限前…

ios分发平台怎么提交工单管理

●工单管理 ●控制台-个人中心-工单管理 ●创建工单-提交工单 ●创建工单-提交完成 ●提交成功 ●工单回复使用 ●回复流程完成

gitlab高级功能之CI/CD组件 - 原理介绍(一)

文章目录 1. 介绍2. 组件存储库3. 创建组件存储库3.1 目录结构 4. 发布组件5. 在 CI/CD 配置中使用组件5.1 避免使用全局关键字5.2 用输入替换硬编码值5.3 用输入替换自定义 CI/CD 变量 6. 将 CI/CD 模板转换为组件 参考文档&#xff1a;https://docs.gitlab.com/ee/ci/compone…

NodeJs(一):初识nodejs、模块化、CommonJS、ESModule等

目录 (一)Nodejs简介 1.nodejs是什么 2.nodejs架构 3.nodejs的应用场景 (二)准备工作 1.安装nodejs 2.nodejs版本管理工具 (三)nodejs的使用 1.node的输入 2.node的输出 3.其他的console方法 (四)全局对象 1.常见的全局对象 2.特殊的全局对象 3.global和window的…

L1-006:连续因子

题目描述 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3567&#xff0c;其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N&#xff0c;要求编写程序求出最长连续因子的个数&#xff0c;并输出最小的连续因子序列。 输入格式&#xff1a; 输入在一行…

文献速递:人工智能在健康和医学中

人工智能在健康和医学中 01 文献速递介绍 这篇文章详细探讨了人工智能&#xff08;AI&#xff09;在医学领域的最新进展、挑战和未来发展的机遇。 1.医学AI算法的最新进展&#xff1a; **AI在医疗实践中的应用&#xff1a;**虽然AI系统在多项回顾性医学研究中表现出色&…