【leetcode系列】String to Integer (atoi)

ゞ 浴缸里的玫瑰 2022-08-10 16:51 225阅读 0赞

这个我就直接上代码了,最开始把“abc123“也算作合法的了,后来查了一下atoi的定义,把这种去掉了。

  1. public class Solution {
  2. public static int atoi(String inStr) {
  3. long result = 0L;
  4. /*
  5. * 网上查了一下,atoi函数的定义是如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,
  6. * 之后检测到非数字(包括结束符\0)字符时停止转换,返回整型数。否则,返回零。可能的输入情况有: 1、空字符串
  7. * 2、"123abc"、"1a2b3c"、"abc123"、"-123abc" 3、溢出 4、有空格
  8. */
  9. // step1:过滤空格
  10. inStr = inStr.trim();
  11. char[] inCharArray = inStr.toCharArray();
  12. int index = 0;
  13. // step2:正负号
  14. char flag = '+';
  15. if (inCharArray[0] == '+' || inCharArray[0] == '-') {
  16. flag = inCharArray[0];
  17. index = 1;
  18. }
  19. // step3:转换和各种判断
  20. for (int i = index; i < inCharArray.length; i++) {
  21. if (Character.isDigit(inCharArray[i])) {
  22. result = result * 10 + Integer.parseInt(inCharArray[i] + "");
  23. } else {
  24. break;
  25. }
  26. }
  27. // step4:带上正负号
  28. if (flag == '-') {
  29. result = -result;
  30. }
  31. // step5:是否溢出
  32. if (result > Integer.MAX_VALUE) {
  33. result = Integer.MAX_VALUE;
  34. } else if (result < Integer.MIN_VALUE) {
  35. result = Integer.MIN_VALUE;
  36. }
  37. return (int) result;
  38. }
  39. public static void main(String[] args) {
  40. // System.out.println(Integer.MAX_VALUE + "" + Integer.MIN_VALUE);
  41. String[] testCase = { "123abc", "+123abc", "-123abc", " 123abc ",
  42. "abc123", "1ab2c3", "2222222222", "-2222222222" };
  43. for (String test : testCase) {
  44. System.out.print(atoi(test));
  45. System.out.println();
  46. }
  47. }
  48. }

发表评论

表情:
评论列表 (有 0 条评论,225人围观)

还没有评论,来说两句吧...

相关阅读