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

Implementatoito 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 theC++function had been updated. If you still see your function signature accepts aconst char *argument, please click the reload buttonto 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

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

class Solution 
 {
     public int myAtoi(String str) 
     {
         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.
         int sign = 1;        // the sign before the number. default is 1 (positive).
         int index = 0;        // index for num string to go through.
 
         
         // Step 0: if parameter str is null or "", then return 0.
         if(str.length() == 0 || str == null)
             return 0;
         
         // Step 1: trim the whitespace.
         str = str.trim();
         
         // Step 2: check first char is '+' or '-', move the index by 1 and also sign value.
         if(str.charAt(0) == '+')
             index++;
         else if(str.charAt(0) == '-')    
         {
             index++;
             sign = -1;    // change the sign to -1 (negative).
         }
         
         // Step 3: go through the str string.
         for(; index<str.length(); index++)
         {
             // if this char is not a number char, then break. No matter there are more numbers after.
             if(str.charAt(index) > '9' || str.charAt(index) < '0')
                 break;
             
             // add this char value into res.
             res = res * 10 + (str.charAt(index) - '0');        // char - '0' is the correct int value.
             
             // check the num exceed the max or not.
             if(res > Integer.MAX_VALUE)        // res should be long because here res might be over Integer.max value.
                 break;
         }
         
         
 
         // Step 4: depending on the sign and max or min value, return res.
         if(res * sign >= Integer.MAX_VALUE)
             return Integer.MAX_VALUE;
         else if(res * sign <= Integer.MIN_VALUE)
             return Integer.MIN_VALUE;
         
         // goes here meaning the res number doesn't exceed max and min integer value.
         return (int)res * sign;        // here need to cast res to int.
     }
 }

参考资料:N/A

LeetCode 题目列表 -LeetCode Questions List

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

相关推荐