DSA
String to Integer (atoi)
Strings. Time O(n), Space O(1).
Practice Link
Approach#
Process the string in four sequential steps: (1) skip leading whitespace, (2) detect an optional + or - sign, (3) skip leading zeros, (4) accumulate digit characters into a number. After each digit is added, check for overflow against INT_MAX / INT_MIN and clamp immediately. Stop at the first non-digit character. All operations are a single left-to-right scan making it O(n) time and O(1) space.
cpp
class Solution {
public:
int myAtoi(string s) {
if(s.length()==0)
return 0;
//ignore trailing whitespaces
int start =0;
while (start < s.length() && s[start] == ' ')
start++;
//check sign
int sign = 1;
if (start < s.length() && (s[start] == '+' || s[start] == '-')) {
if (s[start] == '-') sign = -1;
start++;
}
//ignore trailing zereos
while (start < s.length() && s[start] == '0')
start++;
int ind = start;
while(ind<s.length() && s[ind]>='0' && s[ind]<='9')
ind++;
if(start==ind)
return 0;
long long num=0;
for(int i=start;i<ind;i++)
{
int digit = s[i]-'0';
num = num*10 + digit;
if(sign==-1 && -num < INT32_MIN)
return INT32_MIN;
if(sign == 1 && num > INT32_MAX)
return INT32_MAX;
}
return (sign)*num;
}
};
Time Complexity: O(n)
Space Complexity: O(1)