1
1
class Solution {
2
2
public:
3
- int myAtoi (string s) {
4
-
5
- // INT_MAX : 2147483647
6
- // E.g. : 2147483648
7
-
8
- int i = 0 , n = s.size (), ans = 0 , sign = 1 ;
9
- bool isSymbolUsed = false ;
10
-
11
- while (i<n && s[i]==' ' ){
12
- i++;
13
- }
14
-
15
- while (i<n){
16
- char character = s[i];
17
- if (character == ' -' || character == ' +' ){
18
- if (isSymbolUsed){
19
- break ;
20
- } else if (character == ' -' ){
3
+ int solve (string s, int ans, int index, int sign, bool isSymbolUsed){
4
+ if (s[index]==' \0 ' || s[index]==' .' || s[index]==' ' || (isSymbolUsed && (s[index]==' +' || s[index]==' -' ))){
5
+ return ans;
6
+ } else {
7
+ if (s[index] == ' -' || s[index] == ' +' ){
8
+ if (s[index] == ' -' ){
21
9
sign = -1 ;
22
10
}
23
11
isSymbolUsed = true ;
24
- } else if (character>=' 0' && character<=' 9' ){
25
- int digit = character - ' 0' ;
26
- if ((ans > INT_MAX/10 ) || (ans==INT_MAX/10 && INT_MAX%10 <=digit)){
12
+ } else if (s[index]>=' 0' && s[index]<=' 9' ){
13
+ int digit = s[index]-' 0' ;
14
+ isSymbolUsed = true ;
15
+ if ((ans > INT_MAX/10 ) || (ans == INT_MAX/10 && digit%10 >=INT_MAX%10 )){
27
16
return INT_MAX;
28
- } else if ((ans < INT_MIN/10 ) || (ans== INT_MIN/10 && (~INT_MIN%10 +1 )%10 <=digit )){
17
+ } else if ((ans < INT_MIN/10 ) || (ans == INT_MIN/10 && digit% 10 >= (~INT_MIN%10 +1 )%10 )){
29
18
return INT_MIN;
30
19
} else {
31
20
ans = ans*10 + sign*digit;
32
21
}
33
- isSymbolUsed = true ;
34
22
} else {
35
- break ;
23
+ return ans ;
36
24
}
37
- i++;
25
+ index++;
26
+ return solve (s, ans, index, sign, isSymbolUsed);
27
+ }
28
+ }
29
+
30
+ int myAtoi (string s) {
31
+ int ans = 0 , sign = 1 , index = 0 ;
32
+ bool isSymbolUsed = false ;
33
+
34
+ while (s[index]!=' \0 ' && s[index]==' ' ){
35
+ index++;
38
36
}
39
37
40
- return ans;
38
+ return solve (s, ans, index, sign, isSymbolUsed) ;
41
39
}
42
40
};
0 commit comments