题意image.png

image.png解题思路:

  • 去除左右空格字符
  • 标记符号 sign,以及开始位置,如果有符号,则从i+1开始,i从0开始
  • 遍历字符串,最后判断最大值

PHP代码实现:

  1. class Solution {
  2. /**
  3. * @param String $str
  4. * @return Integer
  5. */
  6. function myAtoi($str) {
  7. if (!$str) return 0;
  8. $str = trim($str);
  9. $first = $str[0];
  10. $sign = 1;//正整数
  11. $res = 0;
  12. if ($first == "+") {
  13. $start = 1;
  14. } else if ($first == "-") {
  15. $start = 1;
  16. $sign = -1;//负整数
  17. } else {
  18. $start = 0;
  19. }
  20. for ($i = $start; $i < strlen($str); $i++) {
  21. if (!is_numeric($str[$i])) {
  22. return $res * $sign;
  23. }
  24. $res = $res * 10 + $str[$i];
  25. if ($res >= Pow(2, 31)) { //最大边界
  26. if ($sign > 0) {
  27. return Pow(2, 31) - 1 * $sign;
  28. }
  29. return Pow(2, 31) * $sign;
  30. }
  31. }
  32. return $res * $sign;
  33. }
  34. }

GO代码实现:

  1. func myAtoi(str string) int {
  2. str = strings.TrimSpace(str)
  3. result := 0
  4. sign := 1
  5. for i, v := range str {
  6. if v >= '0' && v <= '9' {
  7. result = result * 10 + int(v - '0')
  8. } else if v == '-' && i == 0 {
  9. sign = -1
  10. } else if v == '+' && i == 0 {
  11. sign = 1
  12. } else {
  13. break
  14. }
  15. // 数值最大检测
  16. if result > math.MaxInt32 {
  17. if sign == -1 {
  18. return math.MinInt32
  19. }
  20. return math.MaxInt32
  21. }
  22. }
  23. return sign * result
  24. }