题目
Implement atoi to convert a string to an integer.
相当于实现一个C++的atoi()函数。
分析
题目不难,主要是需要考虑到对各种输入用例的处理。
- 字符串中空格的处理
- 非法字符的处理
- 转换结果溢出的处理
首先,对于字符串格式,空格不计入计算。
Java中String类trim()
方法可以很好地解决这个问题
首字母只能是符号’+’、 ‘-‘、数字的一种。
整型数据的范围:
Integer.MAX_VALUE
(2147483647)
Integer.MIN_VALUE
(-2147482648)
超出范围则返回最大值与最小值。
所以我们可以用long
类型的变量存储结果.
代码(Java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public class Solution { public int myAtoi(String str) { long num = 0; if(str == null) return 0; str = str.trim(); if(str.length() == 0) return 0; boolean isNeg = false; int i = 0; if(str.charAt(0) == '+') i++; if(str.charAt(0) == '-') { i++; isNeg = true; } for(; i < str.length(); i++){ int tmp = (int)(str.charAt(i) - '0'); if(tmp >= 0 && tmp <= 9){ num = num * 10 + tmp; System.out.println(num); if(num > Integer.MAX_VALUE){ if(isNeg){ return Integer.MIN_VALUE; } return Integer.MAX_VALUE; } }else{ break; } } return (int) (isNeg?-num:num); } }
|