首页 > 其他 > 详细

leetcode 8. String to Integer (atoi)

时间:2018-11-13 11:25:22      阅读:29      评论:0      收藏:0      [点我收藏+]

标签:amp   注意   ++   class   value   atoi   首字符   ring   判断字符串   

思路:

1.首先去掉字符串首尾的空格

2.判断字符串的长度

3.将其转换为字符数组

4.判断首字符是否为“-” “+” 并记录符号

5.判断是否能转换为数字,不能的话则返回sign * result

能转换则 result = result * 10 + digit;此时则需要判断result与Integer.MAX_VALUE的大小关系

需要注意的一点是 因为先进行求和操作,再判断其与Integer.MAX_VALUE的大小关系,如果result为int类型,则会导致溢出,从而产生错误的结果。因此一开始将result定义为double类型,但返回时则需进行强制转换。

class Solution {
  public int myAtoi(String str) {
    if (str == null) return 0;

    str = str.trim();  //去掉字符串首尾的空格 
    if (str.length() == 0) return 0;

    char[] chArray = str.toCharArray(); //toCharArray():将字符串对象中的字符转换为一个字符数组
    int sign = 1;
    int i = 0;
    if (chArray[0] == +) {
      sign = 1;
      i++;
    } else if (chArray[0] == -) {
      sign = -1;
      i++;
    }

    double result = 0;  //使用int会溢出 使用double则不会
    while (i < chArray.length) {
      int digit = chArray[i] - 0;
      if (digit < 0 || digit > 9) {
        return (int)(sign * result);
      }
      
      result = result * 10 + digit;
        if ((result >= Integer.MAX_VALUE && sign == 1) || (result >= Integer.MAX_VALUE + 1  && sign == 0)) {
        return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
      }
      i++;
    }

    return (int)(sign * result);
  }
}

 

leetcode 8. String to Integer (atoi)

标签:amp   注意   ++   class   value   atoi   首字符   ring   判断字符串   

原文:https://www.cnblogs.com/yanhowever/p/9951226.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号