本文共 1472 字,大约阅读时间需要 4 分钟。
请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0 。
提示:
示例 1:
输入: “42”
输出: 42
示例 2:
输入: " -42"
输出: -42 解释: 第一个非空白字符为 ‘-’, 它是一个负号。 我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
示例 3:
输入: “4193 with words”
输出: 4193 解释: 转换截止于数字 ‘3’ ,因为它的下一个字符不为数字。
示例 4:
输入: “words and 987”
输出: 0 解释: 第一个非空字符是 ‘w’, 但它不是数字或正、负号。 因此无法执行有效的转换。
示例 5:
输入: “-91283472332” 输出: -2147483648
解释: 数字 “-91283472332” 超过 32位有符号整数范围。 因此返回 INT_MIN (−231) 。
执行用时 :0 ms/4 ms, 在所有 Go 提交中击败了100.00%/54.75% 的用户
内存消耗 :2.3 MB, 在所有 Go 提交中击败了63.22%的用户执行效率有所波动
这道题就和一般项目思路一样,尽可能囊括更多的可能,没有什么特别的算法。 用go自带的strconv.Atoi等方式来写代码,执行情况都差不多。
func myAtoi3(str string) int { // 去掉前后空格 str = strings.TrimSpace(str) l := len(str) if l < 1 { return 0 } r := 0 i := 0 // 是否负数 n := 1 // 去掉开头是+或- // - if str[0] == 45 { i = 1 n = -1 } // + if str[0] == 43 { i = 1 } for ; i < l; i++ { // 必须是数字,否则跳出 if str[i] < 48 || str[i] > 57 { break } r = r*10 + int(str[i]-48)*n // 是否超出边界 if r > 2147483647 { return 2147483647 } else if r < -2147483648 { return -2147483648 } } // 返回 return r}
转载地址:http://itkpi.baihongyu.com/