当前位置: 首页 > 编程日记 > 正文

字符串转换整数 (atoi)

题目:

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

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

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

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

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

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

说明:

  假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231,  231 − 1]。如果数值超过这个范围,qing返回  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) 。
看到这个题,题很长,我们先来分析一下题目:
  1.如果非空字符的第一个是正号或者负号,将其选取,并和后面的数字连接起来。
  2.如果非空字符的第一个是数字,将它和后面的数字连接起来。
  3.如果非空字符的第一个既不是正号或负号,也不是数字,返回0。
  4.如果字符串为空,或者字符串内只包含空字符,返回0。
  5.如果第一个非空字符是正号或负号,但接下来的第二个字符不是数字,返回0。对于"+-5"、"+ 6"这两种情况,都返回0。

   6.如果数值超过可表示的范围 [−2^31,  2^31 − 1],则返回  INT_MAX (2^31 − 1) 或 INT_MIN (−2^31) 。
实现时用Integer.valueOf()函数抛出的异常来判断整数越界
代码如下:
class Solution {public int myAtoi(String str) {int len = str.length();int i = 0;while(i < len && str.charAt(i) == ' '){i++;}if(i == len || !((str.charAt(i) == '+') || (str.charAt(i) =='-') || (str.charAt(i) >= '0' &&  str.charAt(i) <= '9'))){return 0;}StringBuffer res = new StringBuffer();if(str.charAt(i) == '-'){res.append('-');i++;}else if(str.charAt(i) == '+'){res.append('+');i++;}if(i == len || !(str.charAt(i) >= '0' &&str.charAt(i) <= '9')){return 0;}while(i < len && (str.charAt(i) >= '0' && str.charAt(i) <= '9')){res.append(str.charAt(i));i++;}int num = Integer.valueOf(res.toString());try{return num;}catch (Exception e){if(res.substring(0,1).equals('-')){return Integer.MIN_VALUE;}else{return Integer.MAX_VALUE;}}}
}

转载于:https://www.cnblogs.com/youdiaodaxue16/p/10746346.html

相关文章:

Spring boot 忽略对mybatis的配置

SpringBootApplication(exclude{DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class}) https://blog.csdn.net/wo541075754/article/details/73379962

Git远程仓库地址变更

简单方法 使用方法三 方法有很多&#xff0c;这里简单介绍几种&#xff1a; 以下均以项目git_test为例&#xff1a; 老地址&#xff1a;http://192.168.1.12:9797/john/git_test.git 新地址&#xff1a;http://192.168.100.235:9797/john/git_test.git 远程仓库名称&#xff…

如何优化你的网站快速提高流量

网站页面优化的SEO策略 对那些会主动产生成百上千甚至成千上万页面的网站优化&#xff0c;一定要转换思维方式。传统SEO程序&#xff0c;先调查选定关键词&#xff0c;然后针对每个关键词主题产生页面&#xff0c;手动书写标题标签&#xff0c;段落标题标签 和页面简介&#xf…

c#正则表达式使用详解

正则表达式(Regular expressions)是一套语法匹配规则&#xff0c;各种语言&#xff0c;如Perl&#xff0c; .Net和Java都有其对应的共享的正则表达式类库。在.Net中&#xff0c;这个类库叫做Regex。简单的说&#xff0c;Regex是从字符窗中查找匹配字符串的应用类。通过Regex&am…

软件安装(ubuntu) --Linux基础编程

Ubuntu&#xff1a;一个以桌面应用为主的开源GNU/Linux操作系统 1、在线安装&#xff08;Ubuntu Example&#xff09; 【安装】&#xff1a;sudo apt-get install 安装包的名字&#xff0c;或者&#xff1a;sudo apt install 安装包的名字&#xff08;16.04及以上版本&#xff…

Springboot结合 framework 加载静资源 出现404 问题解决 记录

<!- 在HTML页面加入这样--><#assign ctxrequest.contextPath /> 在引入的静态资源路径上 添加以下内容

studyLink

http://order.csdn.net/myorder/detail?id850343 csdn 转载于:https://www.cnblogs.com/zhujiasheng/p/8010861.html

CCNA的一个综合实验(经典)

【背景描述】 该企业的具体环境如下&#xff1a; 1、企业具有2个办公地点&#xff0c;且相距较远&#xff0c;公司总共大约有200台主机。 2、A办公地点具有的部门较多&#xff0c;例如业务部、财务部、综合部等&#xff0c;为主要的办公场所&#xff0c;因此这部分的交换网络对…

关于EF中批量添加的个人探索

实际的测试代码和数据记录&#xff0c;还有最终的总结都在下面&#xff1a; /// <summary>/// 这种做法&#xff0c;不用了说了&#xff0c;每次遍历都会打开一次db链接&#xff0c;然后执行insert操作&#xff1b;/// </summary>static void CreateBluckInsertDat…

HDOJ 1157 HDU 1157 Who's in the Middle ACM 1157 IN HDU

MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid1157 题目描述:Whos in the MiddleTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2451 Accep…

Keras使用多个GPU并行

model Model(inputs[v_i, v_j], outputsoutput_list) model multi_gpu_model(model,4) model.compile(....) 主要就是第二句话中的 multi_gpu_model函数&#xff0c;会把数据和模型分到多个gpu上执行有个坑&#xff0c;就是整个程序导入keras时要么全部from keras import ...…

使用JackJSON 流式API 创建JSON串【学习记录】

教程网址&#xff1a;Jackson流式API 目标JSON串 原始JSON串 核心代码 思路&#xff1a;先将原始JSON串生成对应的对象&#xff0c;获取到其数据 package com.run.runlpwebdemo.utils;import java.io.IOException; import java.io.StringWriter; import java.util.List;impo…

Eclipse插件安装

clispe想必大家都很熟悉了&#xff0c;一般来说&#xff0c;eclipse 插件都是安装在plugins目录 下。不过这样一来&#xff0c;当安装了许多插件之后&#xff0c;eclipse变的很大&#xff0c;最主要的是不便 于更新和管理众多插件。用links 方式安装eclipse插件&#xff0c;可以…

linux 命令之文件读取,head, tail, tailf, sed

head 看文件的前100行head -100 filename tail/tailf查看文件的后100行tail -100 filename 或 tail -n 100 filename tailf filename tail -f filename sed sed -n 100,200p filename 这样你就可以只查看文件的第100行到第200行。 转载于:https://www.cnblogs.com/xiaoniu-…

软件使用[19]

1 -- 服务自动的原理2 -- 命令chkconfig使用方法chkconfig是Linux系统中基于命令行的服务管理工具&#xff0c;其用途是启用和禁用系统服务。 chkconfig --list [name] chkconfig --add name chkconfig --del name chkconfig [--level levels] name chkconfig [--level le…

ORA-01747: user.table.column, table.column 或列说明无效 异常解决方法总结

1.sql 拼接错误 比如多了个逗号&#xff0c;少了个引号什么的&#xff0c;大部分其实都是这个问题&#xff0c;还是多细心&#xff0c;复制粘贴的时候多看看。 2.sql语句中使用了 Oracle 声明的关键字 --查询数据库关键字select * from v$reserved_words;----查询表中是否有关键…

SpringBoot 获取 application.properties 文件中的内容方法 【学习记录】

1 . Value注解来获取配置的值 2. ConfigurationProperties注解

安装swoole

php需要安装swoole扩展 swoole4.3.2 cd /usr/local/src/wget https://pecl.php.net/get/swoole-4.3.2.tgztar -zxvf swoole-4.3.2.tgzmv swoole-4.3.2 swoolecd swoole/usr/local/php/bin/phpize# 增加php配置./configure --enable-openssl --enable-swoole --enable-http2 --e…

layUI 学习记录

1 点击导航栏跳转页面 <!DOCTYPE html> <html> <head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1, maximum-scale1"><title>layout 后台大布局 - Layui</ti…

分享个网盘,个人觉得很不错!

金山网盘&#xff1a;http://k.wps.cn 可以在电脑上虚拟一个盘&#xff0c;你要上传下载删除文件&#xff0c;可以直接在本地电脑上操作&#xff0c;就像用自己硬盘的一个分区或是U盘一样&#xff0c;操作方便&#xff0c;但速度肯定没硬盘U盘快了&#xff0c;真正速度取决于你…

JSP 学习笔记 3

八jsp 九个内置对象1.内置对象的描述这就个内置对象都是servlet API的类或者接口的实例。JSP把他们都初始化了。2.九个内置对象分别是l application: javax.servlet.ServletContext的实例&#xff0c;代表JSP所属WEB应用本身&#xff0c;用于JSP叶面之间&#xff0c;或…

空间新闻模块CSS

#mod_10024 { /* 国内新闻模块 */ } #mod_10024 .modtl { /* 题头左 */ } #mod_10024 .modtc { /* 题头中 */ } #mod_10024 .modtr { /* 题头右 */ } #mod_10024 .modtit { /* 模块标题 */ } #mod_10024 a.modact img { /* "编辑图标" */ } #mod_10024 a.modact,#mod…

Cordova入门系列(三)Cordova插件调用

上一章我们介绍了cordova android项目是如何运行的&#xff0c;这一章我们介绍cordova的核心内容&#xff0c;插件的调用。演示一个例子&#xff0c;通过cordova插件&#xff0c;去调用摄像头。 一、插件的安装以及基本信息&#xff1a; 我们先在项目中安装调用摄像头的插件cor…

LVS 介绍 原理

一、 LVS简介 LVS是Linux Virtual Server的简称&#xff0c;也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目&#xff0c;它的官方站点是www.linuxvirtualserver.org&#xff08;版本很久不更新了&#xff09;。 现在LVS已经是 Linux标准内核的一部分…

腾讯云 短信服务 【学习记录 】

github 链接 https://github.com/qcloudsms/qcloudsms_java/tree/master maven 要使用 qcloudsms_java 功能&#xff0c;需要在 pom.xml 中添加如下依赖&#xff0c; <dependency><groupId>com.github.qcloudsms</groupId><artifactId>qcloudsms<…

Coolite Toolkit学习笔记六:常用控件Accordion、ToolBar、ToolTip

一、Accordion控件 Accordion的功能非常适用&#xff0c;使用很简单&#xff0c;轻轻松松的就可以构建一个可折叠的界面展示应用效果。相信大多数做ASP.NET开发的朋友都使用过ASP.NET AJAX Control Toolkit&#xff0c;它里面也提供有Accordion控件&#xff0c;详细可以查…

与ObjectDataSource共舞

4&#xff0c;ORM组件XCode&#xff08;与ObjectDataSource共舞&#xff09; XCode为了能更方便的解决大部分问题&#xff0c;不得不“屈身”于ObjectDataSource。 先上一个经典例子&#xff08;ObjectDataSourceGridView&#xff09;&#xff08;ObjectDataSource&#xff09;…

2.4 Go语言基础之切片

本文主要介绍Go语言中切片&#xff08;slice&#xff09;及它的基本使用。 一、引子 因为数组的长度是固定的并且数组长度属于类型的一部分&#xff0c;所以数组有很多的局限性。 例如&#xff1a; func arraySum(x [3]int) int{sum : 0for _, v : range x{sum sum v}return …

java 文件下载 【学习记录】

工具类 public static Boolean downloadExcelFile(HttpServletResponse response, String fileName) {OutputStream output;File file new File(fileName);if (file.exists()) {try {FileInputStream fileInputStream new FileInputStream(file);BufferedInputStream buffe…

[UI自动化]:控制浏览器操作

控制浏览器窗口大小 . PC端执行自动化测试脚本大多的情况下是希望浏览器在全屏幕模式下执行&#xff0c;那么可以使用maximize_window()方法使打开的浏览器全屏显示 控制浏览器后退、前进 在使用浏览器浏览网页时&#xff0c;浏览器提供了后退和前进按钮&#xff0c;可以方便地…