题目

image.png

思路

  • 有限状态机

代码

  1. class Solution {
  2. public int myAtoi(String s) {
  3. char[] chars = s.toCharArray();
  4. int len = chars.length, index = 0, sign = 1;
  5. //去掉前导符号
  6. while (index < len && chars[index] == ' ') {
  7. index++;
  8. }
  9. //去除空格后字符串为空了
  10. if (index == len) return 0;
  11. //判断第一个非空字符是否为+、-、数字、其他字符
  12. if (chars[index] == '-') {
  13. sign = -1;
  14. index++;
  15. } else if (chars[index] == '+') {
  16. index++;
  17. } else if (chars[index] < '0' || chars[index] > '9') {
  18. return 0;
  19. }
  20. int ans = 0;
  21. while (index < len && chars[index] >= '0' && chars[index] <= '9') {
  22. int digit = chars[index] - '0';
  23. if (ans > (Integer.MAX_VALUE - digit) / 10) {
  24. // 本来应该是 ans * 10 + digit > Integer.MAX_VALUE
  25. // 但是 *10 和 + digit 都有可能越界,所有都移动到右边去就可以了。
  26. return sign == -1 ? Integer.MIN_VALUE : Integer.MAX_VALUE;
  27. }
  28. ans = ans * 10 + digit;
  29. index++;
  30. }
  31. return sign * ans;
  32. }
  33. }

字符串转换整数(atoi)