Thiết kế module: loại bỏ các ký tự khoảng trắng (whitespace) cho đến khi gặp ký tự không phải khoảng trắng đầu tiên. Từ ký tự đó, lấy dấu + hoặc - tùy chọn, theo sau là các chữ số, chuyển thành giá trị số.
Nếu chuỗi không bắt đầu bằng số hợp lệ, hoặc rỗng/chỉ có khoảng trắng → không chuyển đổi.
Ví dụ: input "-45" → output -45.
Giải pháp:
- sign := 1, base := 0, i := 0, n := độ dài chuỗi.
- While i < n và str[i] là khoảng trắng → i++.
- Nếu ký tự đầu là '-' → sign := -1, ngược lại sign := 1.
- While str[i] trong '0'..'9':
- Đọc từng ký tự chuyển sang số, cập nhật base = base*10 + (str[i]-'0').
- Trả về base * sign.
Ví dụ C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int myAtoi(string str) {
int sign = 1;
int base = 0;
int i = 0;
int n = str.size();
while (i < n && str[i] == ' ') {
i++;
}
if (str[i] == '-' || str[i] == '+')
sign = 1 - 2 * (str[i++] == '-');
while (str[i] >= '0' && str[i] <= '9') {
if (base > INT_MAX/10 || (base == INT_MAX/10 && str[i]-'0' > INT_MAX%10)) {
if (sign == 1) return INT_MAX;
else return INT_MIN;
}
base = (base * 10) + (str[i++] - '0');
}
return base * sign;
}
};
int main() {
Solution ob;
cout << ob.myAtoi("-45") << endl;
cout << ob.myAtoi(" 56") << endl;
cout << ob.myAtoi("100") << endl;
}
Đầu vào
"-45" " 56" "100"
Đầu ra
-45 56 100