题意
解题思路:
- 去除左右空格字符
- 标记符号 sign,以及开始位置,如果有符号,则从i+1开始,i从0开始
- 遍历字符串,最后判断最大值
PHP代码实现:
class Solution {/*** @param String $str* @return Integer*/function myAtoi($str) {if (!$str) return 0;$str = trim($str);$first = $str[0];$sign = 1;//正整数$res = 0;if ($first == "+") {$start = 1;} else if ($first == "-") {$start = 1;$sign = -1;//负整数} else {$start = 0;}for ($i = $start; $i < strlen($str); $i++) {if (!is_numeric($str[$i])) {return $res * $sign;}$res = $res * 10 + $str[$i];if ($res >= Pow(2, 31)) { //最大边界if ($sign > 0) {return Pow(2, 31) - 1 * $sign;}return Pow(2, 31) * $sign;}}return $res * $sign;}}
GO代码实现:
func myAtoi(str string) int {str = strings.TrimSpace(str)result := 0sign := 1for i, v := range str {if v >= '0' && v <= '9' {result = result * 10 + int(v - '0')} else if v == '-' && i == 0 {sign = -1} else if v == '+' && i == 0 {sign = 1} else {break}// 数值最大检测if result > math.MaxInt32 {if sign == -1 {return math.MinInt32}return math.MaxInt32}}return sign * result}
