题目描述

实现 atoi,将字符串转为整数。

在找到第一个非空字符之前,需要移除掉字符串中的空格字符。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。

当字符串中的第一个非空字符序列不是个有效的整数;或字符串为空;或字符串仅包含空白字符时,则不进行转换。

若函数不能执行有效的转换,返回 0。

说明:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。如果数值超过可表示的范围,则返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

示例

示例1:

  1. 输入: ""
  2. 输出:

示例2:

  1. 输入: " -42"
  2. 输出: -
  3. 解释: 第一个非空白字符为 '-', 它是一个负号。
  4. 我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -

示例3:

  1. 输入: "4193 with words"
  2. 输出:
  3. 解释: 转换截止于数字 '' ,因为它的下一个字符不为数字。

示例4:

  1. 输入: "words and 987"
  2. 输出:
  3. 解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
  4. 因此无法执行有效的转换。

示例5:

  1. 输入: "-91283472332"
  2. 输出: -
  3. 解释: 数字 "-91283472332" 超过 位有符号整数范围。
  4. 因此返回 INT_MIN (−)

题型分析

常见算法面试题,题目虽然leetcode难度标签为中等,好像通过率也不怎么高,14%左右,此题在做的过程中需注意以下几点

1、负数前的‘-’号、正数前的‘+’号

2、错误输入,如在开始输入多个空格,或者数字后加字母的情况 如:898word

3、考虑数值溢出问题、max_int=0x7fffffff  min_int=0x80000000

解答代码

C++版:

  1. class Solution {
  2. public:
  3. int myAtoi(string str) {
  4. const int maxint=0x7fffffff;
  5. const int minint=0x80000000;
  6. const long long max=0x100000000;
  7. long long ans=;
  8. bool flag=false;
  9. int st=;
  10. while(st<str.length()&&str[st]==' '){
  11. st++;
  12. }
  13. if(st<str.length()&&str[st]=='+'){
  14. st++;
  15. }else{
  16. if(st<str.length()&&str[st]=='-'){
  17. flag=true;
  18. st++;
  19. }
  20. }
  21. for(int i=st;i<str.length();i++){
  22. if(str[i]<=''&&str[i]>=''){
  23. ans=ans*+str[i]-'';
  24. if(ans>maxint) ans=max;
  25. }else{
  26. break;
  27. }
  28. }
  29. if(flag) ans=-ans;
  30. if(ans>maxint) ans=maxint;
  31. if(ans<minint) ans=minint;
  32.  
  33. return ans;
  34.  
  35. }
  36. };

code

Python版:

  1. class Solution:
  2. def myAtoi(self, str):
  3. """
  4. :type str: str
  5. :rtype: int
  6. """
  7. maxint=0x7fffffff
  8. minint=0x80000000
  9. max=0x80000000
  10. ans=
  11. flag=False
  12. st=
  13. while(st<len(str) and str[st]==' '):
  14. st+=
  15. if (st<len(str) and str[st]=='+'):
  16. st+=
  17. else:
  18. if st<len(str) and str[st]=='-':
  19. flag=True
  20. st+=
  21. for i in range(st,len(str)):
  22. try:
  23. if int(str[i])<= and int(str[i])>=:
  24. ans=ans*+int(str[i])
  25.  
  26. if ans>maxint:
  27. ans=max
  28.  
  29. except ValueError:
  30. break
  31.  
  32. if flag:
  33. ans=-ans
  34. if ans < -minint:
  35. ans = -minint
  36. if ans>maxint:
  37. ans=maxint
  38. return ans

Code

leetcode刷题笔记08 字符串转整数 (atoi)的更多相关文章

  1. 【leetcode刷题笔记】String to Integer (atoi)

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  2. LeetCode刷题指南(字符串)

    作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...

  3. LeetCode刷题笔记和想法(C++)

    主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...

  4. LeetCode刷题笔记 - 12. 整数转罗马数字

    学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...

  5. 18.9.10 LeetCode刷题笔记

    本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...

  6. LeetCode刷题笔记(1-9)

    LeetCode1-9 本文更多是作为一个习题笔记,没有太多讲解 1.两数之和 题目请点击链接 ↑ 最先想到暴力解法,直接双循环,但是这样复杂度为n平方 public int[] twoSum(int ...

  7. Leetcode刷题笔记(双指针)

    1.何为双指针 双指针主要用来遍历数组,两个指针指向不同的元素,从而协同完成任务.我们也可以类比这个概念,推广到多个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,可以称之为滑动窗口 ...

  8. LeetCode刷题笔记(1)常用知识点

    1.Integer.parseInt(String s, int radix)方法的作用是:将radix进制的字符串s转化成10进制的int型数字并返回. Integer.valueof(String ...

  9. LeetCode刷题笔记-回溯法-分割回文串

    题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab"输出:[ ["aa", ...

随机推荐

  1. 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 ...

  2. Python之日志 logging模块

    关于logging模块的日志功能 典型的日志记录的步骤是这样的: 创建logger 创建handler 定义formatter 给handler添加formatter 给logger添加handler ...

  3. CSS简介及基本知识

    (CSS)cascading style sheets:层叠样式表.级联式样式表,简称:样式表. Sheets :就是一个样式文件,它的扩展名为.css Style:外观,个性化 样式表的位置 为了学 ...

  4. 如何在pycharm中使用配置好的virtualenv环境

    1.手动建立: 第一步 建立虚拟环境 Windows cmd: pip install virtualenv 创建虚拟环境目录 env 激活虚拟环境 C:\Python27\Scripts\env\S ...

  5. c#:ThreadPool实现并行分析,并实现线程同步结束

    背景: 一般情况下,经常会遇到一个单线程程序时执行对CPU,MEMORY,IO利用率上不来,且速度慢下问题:那么,怎么解决这些问题呢? 据我个人经验来说有以下两种方式: 1.并行.多线程(Parall ...

  6. POJ-1251 Jungle Roads---MST裸题(需要编号)

    题目链接: https://vjudge.net/problem/POJ-1251 题目大意: 首先给你一个图,需要你求出最小生成树,输入N个节点,用大写字母表示了节点,然后节点与节点之间有权值. 思 ...

  7. angularjs1.x版本,父子组件之间的双向绑定

    今天遇到了一个angularjs的坑, ng-repeat和ng-if会改变他所包含的html中绑定变量的作用域. angularjs自定义指令,可以定义四种变量,通过 =,@,&双向绑定,单 ...

  8. Spring-cloud(五) 使用Ribbon进行Restful请求

    写在前面 本文由markdown格式写成,为本人第一次这么写,排版可能会有点乱,还望各位海涵. 主要写的是使用Ribbon进行Restful请求,测试各个方法的使用,代码冗余较高,比较适合初学者,介意 ...

  9. [LeetCode] Brick Wall 砖头墙壁

    There is a brick wall in front of you. The wall is rectangular and has several rows of bricks. The b ...

  10. [USACO 08JAN]Haybale Guessing

    Description The cows, who always have an inferiority complex about their intelligence, have a new gu ...