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

题目

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

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。

当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。

注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0。

说明:

假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/string-to-integer-atoi
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

class Solution {public int myAtoi(String str) {if (str == null) {return 0;}String value = str.trim();if (value.isEmpty()) {return 0;}java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("^([\\+\\-]?)(\\d{1,})");java.util.regex.Matcher matcher = pattern.matcher(value);if (!matcher.find()) {return 0;}String flag = matcher.group(1);String decimal = matcher.group(2);try {long lValue = Long.parseLong(flag + decimal);if ("".equals(flag) || "+".equals(flag)) {if (lValue > Integer.MAX_VALUE) {return Integer.MAX_VALUE;}	}if ("-".equals(flag)) {if (lValue < Integer.MIN_VALUE) {return Integer.MIN_VALUE;}}} catch (NumberFormatException e) {e.printStackTrace();if ("".equals(flag) || "+".equals(flag)) {return Integer.MAX_VALUE;}if ("-".equals(flag)) {return Integer.MIN_VALUE;}}try {return Integer.parseInt(flag + decimal);} catch (NumberFormatException e) {e.printStackTrace();}return 0;}
}

要点
作为Java程序员,有现成的方法当然要使用。
正则表达式有助于提取数字,假如不满足要求,则直接判定为0。
本题的难度在于,数字可能很大,超出Integer和Long的表达范围,因此在对数字的表达范围进行检查时,需要增加特别的操作。
前述实现并不优雅,后续需要设计更优雅的方案。

准备的用例,如下

	@Testpublic void test01() {assertEquals(42, new L8().myAtoi("42"));assertEquals(42, new L8().myAtoi("+42"));assertEquals(-42, new L8().myAtoi("-42"));assertEquals(-42, new L8().myAtoi("     -42"));assertEquals(4193, new L8().myAtoi("4193 with words"));assertEquals(0, new L8().myAtoi("words and 987"));assertEquals(0, new L8().myAtoi("   "));assertEquals(0, new L8().myAtoi(""));assertEquals(-2147483648, new L8().myAtoi("-91283472332"));assertEquals(2147483647, new L8().myAtoi("91283472332"));assertEquals(Integer.MIN_VALUE, new L8().myAtoi(String.valueOf(Integer.MIN_VALUE)));assertEquals(Integer.MAX_VALUE, new L8().myAtoi(String.valueOf(Integer.MAX_VALUE)));assertEquals(Integer.MAX_VALUE, new L8().myAtoi("20000000000000000000"));assertEquals(Integer.MIN_VALUE, new L8().myAtoi("-20000000000000000000"));}

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

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

相关文章

ROS学习记录:如何在Github上寻找并安装软件包

一、打开网页输入www.github.com 二、进入github界面 三、打开一个终端&#xff0c;输入mkdir catkin_ws1建立一个工作空间 四、使用cd catkin_ws1进入工作空间 五、使用mkdir src创建一个子目录src就是source&#xff0c;原始资料的意思,指的就是程序源代码这类资源材料&#…

小机器人,电子锁,牙刷,表类开关,磁阀开关等一些安防直流驱动的选型介绍分析

安防监控是一门被人们日益重视的新兴行业&#xff0c;就目前发展来看&#xff0c;应用普及程度越来越广&#xff0c;科技含量也越来越高&#xff0c;几乎所有高新科技都可促进其发展&#xff0c;尤其是信息时代的来临&#xff0c;更为该行业的发展提供契机。其中安防领域最为典…

electron 菜单栏打开指定url页面菜单实现方法

electron 菜单栏打开指定url页面菜单 可以是本地URL也可以是远程的URL 自动判断跳转 以下代码可以在主进程main.js里面也可以是在独立的模块文件里面 const { BrowserWindow } require(electron);//定义窗口加载URL export const winURL process.env.NODE_ENV development …

Android原生实现单选

六年前写的一个控件&#xff0c;一直没有时间总结&#xff0c;趁年底不怎么忙&#xff0c;整理一下之前写过的组件。供大家一起参考学习。废话不多说&#xff0c;先上图。 一、效果图 实现思路使用的是radioGroup加radiobutton组合方式。原理就是通过修改RadioButton 的backgr…

企业私有云容器化架构运维实战

企业私有云容器化架构运维实战 了解 什么是虚拟化: 虚拟化&#xff08;Virtualization&#xff09;技术最早出现在 20 世纪 60 年代的 IBM 大型机系统&#xff0c;在70年代的 System 370 系列中逐渐流行起来&#xff0c;这些机器通过一种叫虚拟机监控器&#xff08;Virtual M…

java浅拷贝BeanUtils.copyProperties引发的RPC异常 | 京东物流技术团队

背景 近期参与了一个攻坚项目&#xff0c;前期因为其他流程原因&#xff0c;测试时间已经耽搁了好几天了&#xff0c;本以为已经解决了卡点&#xff0c;后续流程应该顺顺利利的&#xff0c;没想到 人在地铁上&#xff0c;bug从咚咚来~ 没有任何修改的服务接口&#xff0c;抛出…

配置管理员使用Local方式认证并授权用户级别示例

AAA简介 访问控制是用来控制哪些用户可以访问网络以及可以访问的网络资源。AAA是Authentication&#xff08;认证&#xff09;、Authorization&#xff08;授权&#xff09;和Accounting&#xff08;计费&#xff09;的简称&#xff0c;提供了在NAS&#xff08;Network Access…

OpenAI大模型中的模型推理

模型推理 推理有两个方案&#xff0c;一个和训练相同&#xff0c;直接加入Lora层&#xff0c;不过会增加推理延时因为多了lora层的计算&#xff0c;适合线下测评用&#xff0c;如下 from peft import PeftModel from transformers import AutoModel, AutoTokenizer ​ model …

C# HttpWebRequest详解

HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择。它们支持一系列有用的属性。这两个类位 于System.Net命名空间&#xff0c;默认情况下这个类对于控制台程序来说是可访问的。请注意&#xff0c;HttpWebRequest对象不是利用new关键字通过构 造函数来创建…

迁移到云原生:如何使用微服务迁移应用程序

企业遇到大规模部署和监督生产中的应用程序的任务。幸运的是&#xff0c;我们可以使用大量技术和工具。然而&#xff0c;从传统的&#xff0c;整体的结构转变为云态一个人提出了自己的障碍。在这里&#xff0c;您会发现将应用程序从整体设置转移到基于微服务的体系结构时要进行…

【研究背景】基于java的流浪之家动物领养网站的设计与开发

1.选题背景 流浪之家动物领养网站的设计与开发背景主要源于对流浪动物保护和宠物领养问题的关注。随着城市化进程加快&#xff0c;越来越多的流浪动物出现在城市中&#xff0c;它们面临着食物、住所和医疗资源的缺乏。同时&#xff0c;许多爱心人士希望能够给流浪动物一个温暖…

解密负载均衡:如何平衡系统负载(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

spring boot 增量包部署,jar包变小

##pom.xml配置 <plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><layout>ZIP</layout><includes><include><groupId&…

React函数组件使用Effect Hook(副作用钩子)

使用Effect Hook&#xff08;副作用钩子&#xff09; 如果你熟悉 React class 的生命周期函数&#xff0c;你可以把 useEffect Hook 看做 componentDidMount(挂载完成)&#xff0c;componentDidUpdate(更新完成) 和 componentWillUnmount&#xff08;即将销毁前&#xff09; 这…

云原生数据库性能对比(阿里云、百度智能云、腾讯云)

本文作者 LYZ 近些年&#xff0c;云原生数据库成为云厂商的重要发展方向&#xff0c;阿里云、百度智能云、腾讯云均先后发布了自研的云原生数据库。笔者认为云原生数据库具有更高的性价比、更极致的弹性&#xff0c;可以满足业务发展的不同阶段和负载场景的需求&#xff0c;也是…

FPGA高端项目:SDI 视频+音频编解码,提供工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、设计思路和框架设计框图GV8601A均衡EQGTX 时钟要求GTX 调用与控制SMPTE SD/HD/3G-SDISMPTE SD/HD/3G-SDI 接收SMPTE SD/HD/3G-SDI 发送 SDI 视频接收数据处理SDI 音频接收-…

A Prompt Learning Framework for Source Code Summarization

Q: 这篇论文试图解决什么问题&#xff1f; A: 这篇论文试图解决的问题是自动生成代码片段的自然语言摘要&#xff08;也称为注释&#xff09;&#xff0c;这对于帮助开发人员理解和维护源代码至关重要。最近&#xff0c;随着大型语言模型&#xff08;LLMs&#xff09;在许多领…

开源minio-AWS-S3存储的部署及go操作详细

介绍 MinIO是一个开源的分布式对象存储服务&#xff0c;它允许用户在私有云或公有云环境中构建自己的对象存储基础设施。MinIO旨在提供高性能、高可用性的对象存储&#xff0c;并且与Amazon S3兼容&#xff0c;这意味着可以使用S3客户端工具和库直接与MinIO交互&#xff0c;而…

pycharm 工具栏不见了

新版pycharm后&#xff0c; 菜单栏和工具栏不见了 目录 我发现的解决方法&#xff1a; 其他旧版的解决方法&#xff1a; 我发现的解决方法&#xff1a; 其他旧版的解决方法&#xff1a; 另外&#xff0c;一些使用pycharm的新手可能会由于不熟悉软件的功能而误操作&#xff…

SystemVerilog:always_ff,always_comb,always_latch

文章目录 一、简介二、示例 一、简介 Verilog中只有一个通用的always过程块&#xff0c;SystemVerilog中追加了3个具有更明确目的专用always块。 always_ffalways_combalways_latch always_ff, always_comb, always_latch分别是用于寄存器&#xff08;flip-flop&#xff0c;…