题意
解题思路:
- 去除左右空格字符
- 标记符号 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 := 0
sign := 1
for 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
}