码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] String to Integer (atoi)

时间:2016-08-17 11:56:18      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

题目链接: https://oj.leetcode.com/problems/string-to-integer-atoi/

问题:

Implement atoi to convert a string to an integer.

 

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.

 

解题思路:

可以将字符串分为几部分

1)空格

字符串首部的空格直接跳过

2. 正负号

最多只能取一个

3)数字

字符串可以包含0~9以外的字符,如果遇到非数字字符,那么只取该字符之前的部分

 

注意:

这道题的一个关键点是处理溢出,如果超出int的范围,返回边界(2147483647或-2147483648)

通过逐位判断的方法,使用乘法和加法将每个digit附加到已经转换的位之后,并且判断是否溢出

 1   public int atoi(String str){
 2         // 1. null or empty string
 3         if(str == null || str.length() == 0){
 4             return 0;
 5         }
 6         
 7         //2. whitespace
 8         str = str.trim();
 9         
10         char flag = ‘+‘;
11         
12         //check negative or positive
13         int i = 0;
14         if(str.charAt(0) == ‘-‘){
15             flag = ‘-‘;
16             i++;
17         }else if(str.charAt(0) == ‘+‘){
18             i++;
19         }
20         
21         //use double to store result
22         double result = 0;
23         
24         //calculate value
25         while(str.length() > i && str.charAt(i) >= 0 && str.charAt(i) <= ‘9‘){
26             if(Integer.MAX_VALUE/10 < result ||
27                     (Integer.MAX_VALUE/10 == result && Integer.MAX_VALUE%10 < (str.charAt(i)-‘0‘))){
28                 return flag == ‘-‘ ? Integer.MIN_VALUE : Integer.MAX_VALUE;
29             }
30             result = result * 10 + (str.charAt(i) - ‘0‘);
31             i++;
32         }
33         
34         if(flag == ‘-‘){
35             result = -result;
36         }
37         
38         return (int)result;
39     }

 

[LeetCode] String to Integer (atoi)

标签:

原文地址:http://www.cnblogs.com/momo-fun/p/5779140.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!