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/

posted @ 2017-12-10 06:46  Jimmy_Cheng  阅读(213)  评论(0编辑  收藏  举报