8. 字符串转换整数 (atoi)

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

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

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

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

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

说明:

假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [-2^31,  2^31 - 1]。如果数值超过这个范围,qing返回  INT_MAX (2^31 - 1) 或 INT_MIN (-2^31) 。

// 运行 4ms, 大部分都是4ms 左右的运行时间

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "strings"
  6. "math"
  7. )
  8.  
  9. // 私有 atoi 转换
  10. // 在任何情况下,若函数不能进行有效的转换时,请返回 0。
  11. // " -42" -> -42
  12. //输入: "4193 with words"
  13. //输出: 4193
  14. //输入: "words and 987"
  15. //输出: 0
  16. //输入: "-91283472332" < math.MinInt32
  17. //输出: -2147483648
  18. func myAtoi(str string) int {
  19. if str == "" {
  20. return 0
  21. }
  22.  
  23. // 有空格前缀则全部替换
  24. for strings.HasPrefix(str," ") {
  25. str = str[1:]
  26. }
  27. if str == "" {
  28. return 0
  29. }
  30. // 正负符号判定
  31. sign := 1
  32. for str[0] == 45 || str[0] == 43{
  33. if str[0] == 45{
  34. sign = -1
  35. str = str[1:]
  36. break
  37. }
  38. if str[0] == 43{
  39. sign = 1
  40. str = str[1:]
  41. break
  42. }
  43. }
  44.  
  45. if str == "" {
  46. return 0
  47. }
  48.  
  49. for strings.HasPrefix(str,"0") {
  50. str = str[1:]
  51. }
  52. if str == "" {
  53. return 0
  54. }
  55.  
  56. tmp := []int{}
  57.  
  58. for _,v := range str {
  59. // ASCII 码 , 57 -> 9 , 48 -> 0
  60. if v > 57 || v < 48 {
  61. break
  62. } else {
  63. tmp = append(tmp,int(v-48))
  64. }
  65. }
  66.  
  67. //fmt.Println(tmp)
  68.  
  69. // 没有数字返回0
  70. if len(tmp) == 0 {
  71. return 0
  72. }
  73. // 简单越界处理
  74. if len(tmp) > 10 || (len(tmp) == 9 && tmp[0] > 2){
  75. if sign == 1 {
  76. return math.MaxInt32
  77. }
  78. if sign == -1 {
  79. return math.MinInt32
  80. }
  81. }
  82.  
  83. j:=len(tmp)-1
  84. tmpInt := 0
  85. for i:=0;i<len(tmp);i++{
  86. tmpInt += tmp[i] * pow10(j)
  87. j--
  88. }
  89.  
  90. if tmpInt > math.MaxInt32{
  91. if sign == -1 {
  92. return math.MinInt32
  93. } else {
  94. return math.MaxInt32
  95. }
  96. }
  97.  
  98. return tmpInt * sign
  99. }
  100.  
  101. func pow10(i int)int{
  102. if i == 0 {
  103. return 1
  104. }
  105. rst := 1
  106. for ;i>0;i--{
  107. rst *= 10
  108. }
  109. return rst
  110. }
  111.  
  112. func main() {
  113. fmt.Println(myAtoi("-+2"))
  114. }

  

LeetCode Golang 8. 字符串转换整数 (atoi)的更多相关文章

  1. 【LeetCode 8】字符串转换整数 (atoi)

    题目链接 [题解] 注意越界的处理就好 简单题 还有.. 正的-2^31不能由2^31取相反数得到,因为正的int最多到2^31-1 [代码] class Solution { public: boo ...

  2. 前端与算法 leetcode 8. 字符串转换整数 (atoi)

    目录 # 前端与算法 leetcode 8. 字符串转换整数 (atoi) 题目描述 概要 提示 解析 解法一:正则 解法二:api 解法二:手搓一个api 算法 传入测试用例的运行结果 执行结果 G ...

  3. LeetCode 8. 字符串转换整数 (atoi)(String to Integer (atoi))

    8. 字符串转换整数 (atoi) 8. String to Integer (atoi) 题目描述 LeetCode LeetCode8. String to Integer (atoi)中等 Ja ...

  4. 字符串转换整数 (atoi) C++实现 java实现 leetcode系列(八)

    字符串转换整数 (atoi) java实现 C++实现 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当 ...

  5. 17、字符串转换整数 (atoi)

    17.字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...

  6. 8. 字符串转换整数 (atoi)

    8. 字符串转换整数 (atoi) 方法一 import re import math class Solution(object): def myAtoi(self, str): "&qu ...

  7. 【LeetCode】String to Integer (atoi)(字符串转换整数 (atoi))

    这道题是LeetCode里的第8道题. 题目要求: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...

  8. [LeetCode] 8. 字符串转换整数 (atoi)

    题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...

  9. 每日一题LeetCode 8. 字符串转换整数 (atoi)

    问题描述 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将 ...

随机推荐

  1. 死磕itchat源码--__init__.py

    itchat包中的__init__.py是该库的入口:在该文件中的源码如下: # -*- coding: utf-8 -*- from . import content from .core impo ...

  2. Project Euler 30 Digit fifth powers

    题意:判断一个数 N 的每一位的5次方的和是否为其本身 ,求出所有满足条件的数的和 思路:首先设这个数 N 为 n 位,可以简单的判断一下这个问题的上界 10 ^ n <= 9 ^ 5 × n, ...

  3. [bzoj2662 BeiJing wc2012] 冻结 (分层图+最短路)

    传送门 Description "我要成为魔法少女!" "那么,以灵魂为代价,你希望得到什么?" "我要将有关魔法和奇迹的一切,封印于卡片之中„„&q ...

  4. Linux中的gpio口使用方法

    Linux中的IO使用方法 应该是新版本内核才有的方法.请参考:./Documentation/gpio.txt文件 提供的API:驱动需要包含 #include <linux/gpio.h&g ...

  5. smartctl----硬盘状态监控

    smartmontools介绍 smartmontools是一款开源的磁盘控制,监视工具,可以运行在Linux,Unix,BSD,Solaris,Mac OS,OS/2,Cygwin和Windows上 ...

  6. 解决Unity的 The file &#39;MemoryStream&#39; is corrupted! Remove it and launch 崩溃问题

    孙广东   2015.7.30 问题:   在项目平时删除资源或者脚本资源时产生的prefab的脚本引用丢失,特别是在场景scene中丢了解决方式/// 1.又一次Clone项目/// 2.删除项目的 ...

  7. 安卓系统底层C语言算法之測试參数是几个long型的算法

    #include <stdio.h> #define BITS_PER_LONG (sizeof(unsigned long) * 8) //求一个数x是几个long的长度 #define ...

  8. hdu5386 Cover

    Problem Description You have an n∗n matrix.Every grid has a color.Now there are two types of operati ...

  9. 开发效率必备之Mac双屏显示

    自从2015年9月苹果公布EI Captain,带来了一个新的功能,叫做分屏,也就是在一块屏幕上分成左右两部分,能够分别进行操作,互不影响. 例如以下图所看到的: watermark/2/text/a ...

  10. 2015.04.21,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 32

    TEASER PREVIEW 如何描述这些人: 很友好.容易相处的人: 不知疲倦的人: 简单.直率..aboveboard([ə'bʌv'bɔ:d] adv. 光明正大地, 率直地 adj. 光明正大 ...