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", ...
随机推荐
- leetcode算法: Find All Duplicates in an Array
Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others ...
- Python之日志 logging模块
关于logging模块的日志功能 典型的日志记录的步骤是这样的: 创建logger 创建handler 定义formatter 给handler添加formatter 给logger添加handler ...
- CSS简介及基本知识
(CSS)cascading style sheets:层叠样式表.级联式样式表,简称:样式表. Sheets :就是一个样式文件,它的扩展名为.css Style:外观,个性化 样式表的位置 为了学 ...
- 如何在pycharm中使用配置好的virtualenv环境
1.手动建立: 第一步 建立虚拟环境 Windows cmd: pip install virtualenv 创建虚拟环境目录 env 激活虚拟环境 C:\Python27\Scripts\env\S ...
- c#:ThreadPool实现并行分析,并实现线程同步结束
背景: 一般情况下,经常会遇到一个单线程程序时执行对CPU,MEMORY,IO利用率上不来,且速度慢下问题:那么,怎么解决这些问题呢? 据我个人经验来说有以下两种方式: 1.并行.多线程(Parall ...
- POJ-1251 Jungle Roads---MST裸题(需要编号)
题目链接: https://vjudge.net/problem/POJ-1251 题目大意: 首先给你一个图,需要你求出最小生成树,输入N个节点,用大写字母表示了节点,然后节点与节点之间有权值. 思 ...
- angularjs1.x版本,父子组件之间的双向绑定
今天遇到了一个angularjs的坑, ng-repeat和ng-if会改变他所包含的html中绑定变量的作用域. angularjs自定义指令,可以定义四种变量,通过 =,@,&双向绑定,单 ...
- Spring-cloud(五) 使用Ribbon进行Restful请求
写在前面 本文由markdown格式写成,为本人第一次这么写,排版可能会有点乱,还望各位海涵. 主要写的是使用Ribbon进行Restful请求,测试各个方法的使用,代码冗余较高,比较适合初学者,介意 ...
- [LeetCode] Brick Wall 砖头墙壁
There is a brick wall in front of you. The wall is rectangular and has several rows of bricks. The b ...
- [USACO 08JAN]Haybale Guessing
Description The cows, who always have an inferiority complex about their intelligence, have a new gu ...