• LeetCode 8. String to Integer (atoi) (字符串到整数)


    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.

    Update (2015-02-10):
    The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button  to reset your code definition.


    题目标签:String

      题目给了我们一个 str,让我们把它 转换为 int。

      其中有很多违规的条件没有说明:

        正负的符号只能有0个 或者 1个;

        符号后面就应该是数字了,如果遇到不是数字的符号,返回目前为止合格的数字,不需要考虑后面的数字;

        如果数字overflow,大于MAX的要返回MAX,小于MIN 的要返回MIN;

        etc。

    Java Solution:

    Runtime beats 57.67% 

    完成日期:01/09/2017

    关键词:String

    关键点:考虑到所有违规情况

     1 class Solution 
     2 {
     3     public int myAtoi(String str) 
     4     {
     5         long res = 0;        // the res number to return. Note: res to return should be long and cast it to int when return it at the end.
     6         int sign = 1;        // the sign before the number. default is 1 (positive).
     7         int index = 0;        // index for num string to go through.
     8 
     9         
    10         // Step 0: if parameter str is null or "", then return 0.
    11         if(str.length() == 0 || str == null)
    12             return 0;
    13         
    14         // Step 1: trim the whitespace.
    15         str = str.trim();
    16         
    17         // Step 2: check first char is '+' or '-', move the index by 1 and also sign value.
    18         if(str.charAt(0) == '+')
    19             index++;
    20         else if(str.charAt(0) == '-')    
    21         {
    22             index++;
    23             sign = -1;    // change the sign to -1 (negative).
    24         }
    25         
    26         // Step 3: go through the str string.
    27         for(; index<str.length(); index++)
    28         {
    29             // if this char is not a number char, then break. No matter there are more numbers after.
    30             if(str.charAt(index) > '9' || str.charAt(index) < '0')
    31                 break;
    32             
    33             // add this char value into res.
    34             res = res * 10 + (str.charAt(index) - '0');        // char - '0' is the correct int value.
    35             
    36             // check the num exceed the max or not.
    37             if(res > Integer.MAX_VALUE)        // res should be long because here res might be over Integer.max value.
    38                 break;
    39         }
    40         
    41         
    42 
    43         // Step 4: depending on the sign and max or min value, return res.
    44         if(res * sign >= Integer.MAX_VALUE)
    45             return Integer.MAX_VALUE;
    46         else if(res * sign <= Integer.MIN_VALUE)
    47             return Integer.MIN_VALUE;
    48         
    49         // goes here meaning the res number doesn't exceed max and min integer value.
    50         return (int)res * sign;        // here need to cast res to int.
    51     }
    52 }

    参考资料:N/A

    LeetCode 题目列表 - LeetCode Questions List

    题目来源:https://leetcode.com/

  • 相关阅读:
    类加载
    LinkedList插入排序实现
    99乘法表
    关于IO流的抽象类
    分解质因数
    Struts2小demo遇到的几个问题
    Tomcat设置欢迎页问题
    数据库迁移
    EF – 1.模式
    正则表达式
  • 原文地址:https://www.cnblogs.com/jimmycheng/p/8016169.html
Copyright © 2020-2023  润新知