leetcode刷题笔记08 字符串转整数 (atoi)
题目描述
实现 atoi,将字符串转为整数。
在找到第一个非空字符之前,需要移除掉字符串中的空格字符。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。
当字符串中的第一个非空字符序列不是个有效的整数;或字符串为空;或字符串仅包含空白字符时,则不进行转换。
若函数不能执行有效的转换,返回 0。
说明:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。如果数值超过可表示的范围,则返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例
示例1:
输入: ""
输出:
示例2:
输入: " -42"
输出: -
解释: 第一个非空白字符为 '-', 它是一个负号。
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 - 。
示例3:
输入: "4193 with words"
输出:
解释: 转换截止于数字 '' ,因为它的下一个字符不为数字。
示例4:
输入: "words and 987"
输出:
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
因此无法执行有效的转换。
示例5:
输入: "-91283472332"
输出: -
解释: 数字 "-91283472332" 超过 位有符号整数范围。
因此返回 INT_MIN (−) 。
题型分析
常见算法面试题,题目虽然leetcode难度标签为中等,好像通过率也不怎么高,14%左右,此题在做的过程中需注意以下几点
1、负数前的‘-’号、正数前的‘+’号
2、错误输入,如在开始输入多个空格,或者数字后加字母的情况 如:898word
3、考虑数值溢出问题、max_int=0x7fffffff min_int=0x80000000
解答代码
C++版:
class Solution {
public:
int myAtoi(string str) {
const int maxint=0x7fffffff;
const int minint=0x80000000;
const long long max=0x100000000;
long long ans=;
bool flag=false;
int st=;
while(st<str.length()&&str[st]==' '){
st++;
}
if(st<str.length()&&str[st]=='+'){
st++;
}else{
if(st<str.length()&&str[st]=='-'){
flag=true;
st++;
}
}
for(int i=st;i<str.length();i++){
if(str[i]<=''&&str[i]>=''){
ans=ans*+str[i]-'';
if(ans>maxint) ans=max;
}else{
break;
}
}
if(flag) ans=-ans;
if(ans>maxint) ans=maxint;
if(ans<minint) ans=minint;
return ans;
}
};
code
Python版:
class Solution:
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
maxint=0x7fffffff
minint=0x80000000
max=0x80000000
ans=
flag=False
st=
while(st<len(str) and str[st]==' '):
st+=
if (st<len(str) and str[st]=='+'):
st+=
else:
if st<len(str) and str[st]=='-':
flag=True
st+=
for i in range(st,len(str)):
try:
if int(str[i])<= and int(str[i])>=:
ans=ans*+int(str[i]) if ans>maxint:
ans=max except ValueError:
break if flag:
ans=-ans
if ans < -minint:
ans = -minint
if ans>maxint:
ans=maxint
return ans
Code
leetcode刷题笔记08 字符串转整数 (atoi)的更多相关文章
- 【leetcode刷题笔记】String to Integer (atoi)
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...
- LeetCode刷题指南(字符串)
作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...
- LeetCode刷题笔记和想法(C++)
主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...
- LeetCode刷题笔记 - 12. 整数转罗马数字
学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...
- 18.9.10 LeetCode刷题笔记
本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...
- LeetCode刷题笔记(1-9)
LeetCode1-9 本文更多是作为一个习题笔记,没有太多讲解 1.两数之和 题目请点击链接 ↑ 最先想到暴力解法,直接双循环,但是这样复杂度为n平方 public int[] twoSum(int ...
- Leetcode刷题笔记(双指针)
1.何为双指针 双指针主要用来遍历数组,两个指针指向不同的元素,从而协同完成任务.我们也可以类比这个概念,推广到多个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,可以称之为滑动窗口 ...
- LeetCode刷题笔记(1)常用知识点
1.Integer.parseInt(String s, int radix)方法的作用是:将radix进制的字符串s转化成10进制的int型数字并返回. Integer.valueof(String ...
- LeetCode刷题笔记-回溯法-分割回文串
题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab"输出:[ ["aa", ...
随机推荐
- Excel as a Service —— Excel 开发居然可以这么玩
前言 据不完全统计,全世界使用Excel作为电子表格和数据处理的用户数以十亿计,这不仅得益于它的使用简便,同时还因为它内置了很多强大的函数,结合你的想象力可以编写出各种公式,并可快速根据数据生成图表和 ...
- Mysql官方文档翻译系列-7.3.1 Establishing a Backup Policy
原文链接 (https://dev.mysql.com/doc/refman/5.7/en/backup-policy.html) 正文 To be useful, backups must be s ...
- SqlServer优化:当数据量查询不是特别多,但数据库服务器的CPU资源一直100%时,如何优化?
最近和同事处理一个小程序,数据量不是特别大,某表的的数据记录:7000W条记录左右,但是从改别执行一次查询时,却发现查询速度也不快,而且最明显的问题就是CPU100%. sql语句: select g ...
- hdu1009 FatMouse' Trade---贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009 题意:一共有n个房子,每个房子里有老鼠喜欢吃的javabeans,但是每个房间里的javabea ...
- 03、NetCore2.0下Web应用之搭建最小框架
03.NetCore2.0下Web应用之搭建最小框架 这里我们不使用VS2017或者CLI命令的方式创建Asp.Net Core 2.0网页应用程序,而是完全手工的一点点搭建一个Web框架,以便更好的 ...
- MySQL协议学习(1):准备工作
MySQL Client/Server协议 准确的说应该是MySQL Client/Server协议,另一个叫X Protocol的暂不涉及.地址如下:MySQL Client/Server Prot ...
- Dev GridControl GridView 属性大全[中文解释]
Options 选项 OptionsBehavior 视图的行为选项 AllowAddRows 允许添加新数据行 AllowDeleteRows 允许删除数据行 AllowIncrementalSea ...
- arc的安装
安装: # sudo apt-get install php5 php5-curl # ubuntu 系统 # sudo yum install php5 # centos 系统 # cd ...
- Linux之centos系统常用命令总结
1.查看系统版本 cat /etc/redhat-release 文件与目录操作 命令 解析 cd /home 进入 '/home' 目录 cd .. 返回上一级目录 cd ../.. 返回上两级目录 ...
- bzoj3831 [Poi2014]Little Bird 单调队列优化dp
3831: [Poi2014]Little Bird Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 505 Solved: 322[Submit][ ...