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

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

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

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

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

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

说明:

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

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

package main

import (
"fmt"
"strings"
"math"
) // 私有 atoi 转换
// 在任何情况下,若函数不能进行有效的转换时,请返回 0。
// " -42" -> -42
//输入: "4193 with words"
//输出: 4193
//输入: "words and 987"
//输出: 0
//输入: "-91283472332" < math.MinInt32
//输出: -2147483648
func myAtoi(str string) int {
if str == "" {
return 0
} // 有空格前缀则全部替换
for strings.HasPrefix(str," ") {
str = str[1:]
}
if str == "" {
return 0
}
// 正负符号判定
sign := 1
for str[0] == 45 || str[0] == 43{
if str[0] == 45{
sign = -1
str = str[1:]
break
}
if str[0] == 43{
sign = 1
str = str[1:]
break
}
} if str == "" {
return 0
} for strings.HasPrefix(str,"0") {
str = str[1:]
}
if str == "" {
return 0
} tmp := []int{} for _,v := range str {
// ASCII 码 , 57 -> 9 , 48 -> 0
if v > 57 || v < 48 {
break
} else {
tmp = append(tmp,int(v-48))
}
} //fmt.Println(tmp) // 没有数字返回0
if len(tmp) == 0 {
return 0
}
// 简单越界处理
if len(tmp) > 10 || (len(tmp) == 9 && tmp[0] > 2){
if sign == 1 {
return math.MaxInt32
}
if sign == -1 {
return math.MinInt32
}
} j:=len(tmp)-1
tmpInt := 0
for i:=0;i<len(tmp);i++{
tmpInt += tmp[i] * pow10(j)
j--
} if tmpInt > math.MaxInt32{
if sign == -1 {
return math.MinInt32
} else {
return math.MaxInt32
}
} return tmpInt * sign
} func pow10(i int)int{
if i == 0 {
return 1
}
rst := 1
for ;i>0;i--{
rst *= 10
}
return rst
} func main() {
fmt.Println(myAtoi("-+2"))
}

  

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. Asp.net Core 源码-UrlExtensions

    using Microsoft.AspNetCore.Http; namespace SportsStore.Infrastructure { public static class UrlExten ...

  2. IdentityServer4-HybridAndClientCredentials

    一.服务器 Client设置: new Client { ClientId = "mvc1", ClientName = "后台管理MVC客户端", Clien ...

  3. Project Euler 23 Non-abundant sums( 整数因子和 )

    题意: 完全数是指真因数之和等于自身的那些数.例如,28的真因数之和为1 + 2 + 4 + 7 + 14 = 28,因此28是一个完全数. 一个数n被称为亏数,如果它的真因数之和小于n:反之则被称为 ...

  4. Project Euler 37 Truncatable primes

    题意:3797有着奇特的性质.不仅它本身是一个素数,而且如果从左往右逐一截去数字,剩下的仍然都是素数:3797.797.97和7:同样地,如果从右往左逐一截去数字,剩下的也依然都是素数:3797.37 ...

  5. -2 caffe数据结构

    一.Blob 使用: 访问数据元素: 计算diff: 保存数据与读取数据: 二.Layer 三.Net

  6. 洛谷P1567 统计天数

    题目背景 统计天数 题目描述 炎热的夏日,KC非常的不爽.他宁可忍受北极的寒冷,也不愿忍受厦门的夏天.最近,他开始研究天气的变化.他希望用研究的结果预测未来的天气. 经历千辛万苦,他收集了连续N(1& ...

  7. web前端知识框架

  8. Python学习笔记(1)Pycharm基本认识

    Pycharm的使用 集成开发环境(IDE,集成开发环境) VIM  #经典的linux下的文本编辑器 Pycharm,主要用于python开发的ide PyCharm常用快捷键 Ctrl + / # ...

  9. C语言与java的区别

    相同的地方: 1.语法类似:由于Java可以算是从C++发展而来的,因此Java与C语言的语法比较类似 2.编程的熟练程度就是对语言程序库的掌握程度: 从某种程度上来说,编程语言都是由语法和相应的程序 ...

  10. CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)

    1.http://codeforces.com/problemset/problem/149/D 2.题目大意 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色, ...