8. String to Integer(atoi)
class Solution {
public:
bool isDigit(char c) { return c >= '0' and c <='9'; }
int myAtoi(string str) {
size_t idx = 0;
size_t len = str.length();
int sign = 1;
double val = 0;
for (size_t i = 0; i < len; ++i) { // 1st none white space character
if (str[i] == ' ') ++idx;
else break;
}
// while (str[idx] == ' ') ++idx;
if (idx == len) return 0;
// sign(followed by integeral characters)
if (str[idx] == '+') {
sign = 1;
if (!isDigit(str[++idx])) {
return 0;
}
} else if (str[idx] == '-') {
sign = -1;
if (!isDigit(str[++idx])) {
return 0;
}
}
for (; idx < len; ++idx) {
if (!isDigit(str[idx])) break;
val = (str[idx] - '0') + val * 10;
}
val *= sign;
if (val > INT_MAX) return INT_MAX;
else if (val < INT_MIN) return INT_MIN;
else return val;
}
};
this code can pass all the testcases, but has ugly style. One should pay attention on the type of
val
,long long
orunsigned long long
will fail on some testcases. And I still haven’t figured out the reason.
9. Palindrome Number
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) return false;
int _x = x, y = 0;
while (x) {
y = y * 10 + x % 10;
x /= 10;
}
return _x == y;
}
};
this solution can pass all the testcases, but may has problem on (reversed)integer overflow(say input number is 1463847418), and used two extra space.