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/