【LeetCode】String to Integer (atoi)(字符串转换整数 (atoi))
这道题是LeetCode里的第8道题。
题目要求:
请你来实现一个
atoi
函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0。
说明:
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−, − 1]。如果数值超过这个范围,qing返回 INT_MAX ( − 1) 或 INT_MIN (−) 。
示例 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 (−) 。
虽然题目那么长,但是这道题却很简单,因为题目已经举了很多的例子来为我们说明来很多的情况。
首先第一点:先判断第一个字符是否为空格、数字或是正负号。若首字符不是上述字符的任意一种,则直接输出0。若为空格则一直遍历字符至正负号或数字为止,同时标记数字的正负,使用变量flag表示,若为正则flag=1,若为负则flag=0;
然后用res做中间变量保存结果(res=res*10+此时遍历的数字大小)。但这里需要注意一点:就是res的范围。题目要求的最终结果是在 [−, − 1],其实题目不这样要求我们也得不到该范围外的数,因为int类型变量的范围就是 [−, − 1]。遍历过程中也要注意字符是否为数字。
最后题目输出的重点还是在范围上,需要注意一点就是范围的两边是不对称的,最小值是−,最大值是 − 1。
− 1=2147483647,也就是说如果res>214748364或者res=214748364而且当前字符大小>=7时,此时数字就达到最大值了,超出这个范围res就会造成溢出,数据出错, 此时直接输出最大值INT_MAX。但因为正负范围不同,所以正负号要分别考虑,比较麻烦的地方就在这里。
解题代码:
static const auto speedup=[]{
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
return 0;
}();
class Solution {
public:
int myAtoi(string str) {
int i,res=0,flag;
for(i=0;i<str.length();i++){
if(str[i]==' ')continue;
else if(str[i]>='0'&&str[i]<='9'){flag=1;break;}
else if(str[i]=='+'){i++;flag=1;break;}
else if(str[i]=='-'){i++;flag=0;break;}
else return 0;
}
if(str[i]<'0'||str[i]>'9')return 0;
for(;i<str.length();i++){
if(res>214748364||res==214748364&&str[i]>='7'){
if(res==214748364&&flag==0&&str[i]=='7')return -1*(res*10+str[i]-48);
res=INT_MAX;break;
}
res=res*10+str[i]-48;
if(i==str.length()-1||str[i+1]<'0'||str[i+1]>'9')break;
}
if(res==INT_MAX&&flag==0)return -1*res-1;
if(flag)return res;
return -1*res;
}
};
提交结果:
哦,对了。关于代码还有一点就是:代码前五行是我根据别人运行时间短的搬过来的。这样就能有效的缩短运行速度。在竞赛中,遇到大数据时,为文件的读写提供一种更为快速方法。这个代码就是禁用了cin的兼容特性。Click
个人总结:
这种题可以说没有难点,就是判断条件的分析,当然可以在运行时间上做功夫,提高运行速度。
【LeetCode】String to Integer (atoi)(字符串转换整数 (atoi))的更多相关文章
- LeetCode 8. 字符串转换整数 (atoi)(String to Integer (atoi))
8. 字符串转换整数 (atoi) 8. String to Integer (atoi) 题目描述 LeetCode LeetCode8. String to Integer (atoi)中等 Ja ...
- 前端与算法 leetcode 8. 字符串转换整数 (atoi)
目录 # 前端与算法 leetcode 8. 字符串转换整数 (atoi) 题目描述 概要 提示 解析 解法一:正则 解法二:api 解法二:手搓一个api 算法 传入测试用例的运行结果 执行结果 G ...
- 字符串转换整数 (atoi) C++实现 java实现 leetcode系列(八)
字符串转换整数 (atoi) java实现 C++实现 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当 ...
- LeetCode Golang 8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi) 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组 ...
- 17、字符串转换整数 (atoi)
17.字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...
- 8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi) 方法一 import re import math class Solution(object): def myAtoi(self, str): "&qu ...
- 【LeetCode】8. String to Integer (atoi) 字符串转换整数
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:字符串转整数,atoi,题解,Leetcode, 力扣,P ...
- [LeetCode] 8. 字符串转换整数 (atoi)
题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...
- Leetcode8.String to Integer (atoi)字符串转整数(atoi)
实现 atoi,将字符串转为整数. 该函数首先根据需要丢弃任意多的空格字符,直到找到第一个非空格字符为止.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字 ...
随机推荐
- 在WIN7、WIN8中,将快捷方式锁定到任务栏,C#
其实很简单,使用 API 函数 ShellExecute,就可以解决这个问题. 首先添加引用 using System.Runtime.InteropServices; 代码如下: using Sys ...
- 理解C#系列 / 前言
前言 索引 写什么? 为什么写? 怎么写? 写什么? 写和C#编程相关的知识. 写知识的定义,附加对知识的理解. 写知识的作用,使用的场景,使用的条件. 写知识的本质,技术的结构,工作的原理. 写知识 ...
- 使用express4.x版、Jade模板以及mysql重写《nodejs开发指南》微博实例
最近阅读<nodejs开发指南>一书,书是不错的,然而其微博代码示例用的是express3.x,用些过时了,运行代码出现不少bug(我电脑安的是express4.x),于是用express ...
- chrome浏览器之网络面板
这篇指导向你展示怎样检测网络张状况或者在chrome开发工具的网络面板中尽可能的优化网页. 排列的或受阻的请求 症状:同时发出六个请求.之后有一系列的请求排队或受阻.一旦最先的六个请求中有一个响应结束 ...
- Visual SVN IIS反向代理设置
需要解决的问题: 1. 设置反向代理 2. 解决部分后缀文件无法提交的问题 1. 设置反向代理 接收所有的URL 允许所有的HTTP_HOST 跳转到被代理的服务器 2. 允许所有后缀的文件访问IIS ...
- 源文件名长度大于系统支持的长度,无法删除,java主方法执行方式删除
import java.io.File; /** * @author 海盗船长 * 2017年2月14日11:24:26 */ public class DeleteFiles { public st ...
- 如何修改tomcat的启动方式为 run
tomcat根目录\bin\startup.bat,记事本打开,找到: call "%EXECUTABLE%" start %CMD_LINE_ARGS% :end 把start ...
- (十)maven之排除冲突jar包
排除冲突jar包 jar包冲突 <dependencies> <dependency> <groupId>org.springframework</group ...
- 前端性能优化:细说JavaScript的加载与执行
本文主要是从性能优化的角度来探讨JavaScript在加载与执行过程中的优化思路与实践方法,既是细说,文中在涉及原理性的地方,不免会多说几句,还望各位读者保持耐心,仔细理解,请相信,您的耐心付出一定会 ...
- var、let、const声明变量的区别
let和var声明变量的区别:1.let所声明的变量只在let命令所在的代码块内有效.(块级作用域) for(let i=0;i<10;i++){ // ... } console.log(i) ...