美文网首页
LeetCode - 8. String to Integer

LeetCode - 8. String to Integer

作者: Sinexs | 来源:发表于2016-03-15 10:28 被阅读0次

Question


Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

这题的难点应该是atoi这个到底是个神马函数,输入输出的结果是啥。

查了查资料,发现是这样的规律:

  • 返回类型为int类型,若字符串越界,则返回Integer.MAX_VALUE或Integer.MIN_VALUE.
  • 开头是+返回正数;-返回负数。例如“+23”返回23;“-42”返回-42。
  • 开头不是数字,则返回0:“fw923”和“+se243”都返回0。
  • 若开头为空格,则无视空格:“ 233”返回233。
  • 只取连续的数字:“233pp233”返回的是233而不是233233。

貌似暂时就这么多。

所以应对这些规律的解题思路:

  • 首先判断字符串是否为空或长度为0
  • 用trim()去掉字符串首尾的空格
  • 判断符号
  • 判断是否越界

注意点:

  • 返回值sum定义为long,最后return的时候再强制转换为int
  • 判断越界要在for循环里

Solutions


public class Solution {
    public int myAtoi(String str) {
        // 判断是否为空和长度是否为0
        if(str == null || str.length() == 0)
            return 0;
        
        // 去掉字符串首尾的空格
        str = str.trim();
        
        int sign = 1, start = 0, len = str.length();
        long sum = 0;
        
        // 判断符号
        char firstChar = str.charAt(0);
        if (firstChar == '+') {
            sign = 1;
            start++;
        } else if (firstChar == '-') {
            sign = -1;
            start++;
        }
        
        for (int i = start; i < len; i++) {
            if (!Character.isDigit(str.charAt(i))) // 判断是否为数字
                return (int) sum * sign;
                
            sum  = sum * 10 + str.charAt(i) - '0';
            
            // 判断是否越界
            if (sign == 1 && sum > Integer.MAX_VALUE) {
                return Integer.MAX_VALUE;
            }
            if (sign == -1 && (-1) * sum < Integer.MIN_VALUE) {
                return Integer.MIN_VALUE;
            }
        }
        
        return (int) sum * sign;
    }
}

Points


  • String.trim()
    去掉字符串首尾的空格,保留中间的

  • String.charAt()
    返回指定索引处的char值

  • Character.isDigit(char c)
    判断字符c是否为0-9的数字字符

  • 获取数字字符char的值
    int value = c - '0';

  • int的边界
    Integer.MAX_VALUE & Integer.MIN_VALUE

TO DO


暂无

相关文章

网友评论

      本文标题:LeetCode - 8. String to Integer

      本文链接:https://www.haomeiwen.com/subject/fuzflttx.html