[LeetCode] String to Integer (atoi)
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.
解题思路:
本身没有什么难度,需要弄清楚题意。比如,输入的字符一定是正确的整数格式吗?会不会溢出,若溢出如何处理?若有数字字符其他的字符如何处理?在面试中,可以向面试官问清楚这些,便可以动手写代码哒。我们可以先用一个long long类型来存储中间结果。
class Solution { public: int myAtoi(string str) { int len = str.length(); if(len==0){ return 0; } int sign=1; int startIndex=0; while(str[startIndex]==' '){ startIndex++; } if(str[startIndex]=='-'){ startIndex++; sign=-1; }else if(str[startIndex]=='+'){ startIndex++; sign=1; } long long tempResult=0; for(int i=startIndex; i<len; i++){ if(str[i]<'0'||str[i]>'9'){ break; } tempResult *= 10; tempResult += str[i]-'0'; if(tempResult>2147483647){ break; } } tempResult *= sign; int result = (int)tempResult; if(result!=tempResult){ if(sign<0){ result=-2147483648; }else{ result=2147483647; } } return result; } };
二次刷题(2015-07-29)
class Solution { public: int myAtoi(string str) { int len = str.length(); if(len == 0){ return 0; } int sign = 1; long long result = 0; int validIndex = 0; while(validIndex<len&&str[validIndex]==' '){ validIndex++; } if(str[validIndex]=='+'){ validIndex++; }else if(str[validIndex]=='-'){ sign = -1; validIndex++; } while(str[validIndex]>='0'&&str[validIndex]<='9'){ result *= 10; result += str[validIndex] - '0'; long long temp = sign * result; if(temp >= INT_MAX){ return INT_MAX; } if(temp <= INT_MIN){ return INT_MIN; } validIndex++; } return int(sign*result); } };
0 条评论