Gợi ý. Xem xét cẩn thận tất cả các trường hợp đầu vào có thể. Nếu bạn muốn thử thách, vui lòng không xem bên dưới và tự hỏi bản thân các trường hợp đầu vào có thể là gì
ghi chú. Vấn đề này được dự định sẽ được chỉ định một cách mơ hồ [nghĩa là không có thông số kỹ thuật đầu vào nhất định]. Bạn có trách nhiệm thu thập trước tất cả các yêu cầu đầu vào
Cập nhật [2015-02-10].
Chữ ký của hàm C++ đã được cập nhật. Nếu bạn vẫn thấy chữ ký hàm của mình chấp nhận đối số const char *, vui lòng nhấp vào nút tải lại để đặt lại định nghĩa mã của bạn.
cảnh báo spoilers.. nhấp để hiển thị các yêu cầu đối với atoi
Yêu cầu đối với atoi.
Đầu tiên, hàm loại bỏ bao nhiêu ký tự khoảng trắng cần thiết cho đến khi tìm thấy ký tự không phải khoảng trắng đầu tiên. Sau đó, bắt đầu từ ký tự này, lấy một dấu cộng hoặc dấu trừ ban đầu tùy chọn, theo sau là càng nhiều chữ số càng tốt và diễn giải chúng dưới dạng một giá trị số.
Chuỗi có thể chứa các ký tự bổ sung sau các ký tự tạo thành số nguyên, các ký tự này bị bỏ qua và không ảnh hưởng đến hoạt động của hàm này
Nếu chuỗi đầu tiên của các ký tự không phải khoảng trắng trong str không phải là một số nguyên hợp lệ hoặc nếu không có chuỗi nào như vậy tồn tại vì str trống hoặc nó chỉ chứa các ký tự khoảng trắng, thì không có chuyển đổi nào được thực hiện
Nếu không thể thực hiện chuyển đổi hợp lệ, giá trị 0 được trả về. Nếu giá trị chính xác nằm ngoài phạm vi giá trị có thể biểu thị, INT_MAX [2147483647] hoặc INT_MIN [-2147483648] được trả về
số 8. Chuỗi số nguyên [át chủ bài]- Thời gian. $O[n]$
- Khoảng trống. $O[1]$
C++JavaPython
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
class Solution {
public:
int myAtoi[string s] {
trim[s];
if [s.empty[]]
return 0;
const int sign = s[0] == '-' ? -1 : 1;
if [s[0] == '+' || s[0] == '-']
s = s.substr[1];
long num = 0;
for [const char c : s] {
if [!isdigit[c]]
break;
num = num * 10 + [c - '0'];
if [sign * num INT_MAX]
return INT_MAX;
}
return sign * num;
}
private:
void trim[string& s] {
s.erase[0, s.find_first_not_of[' ']];
s.erase[s.find_last_not_of[' '] + 1];
}
};
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
________X
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
class Solution:
def myAtoi[self, s: str] -> int:
s = s.strip[]
if not s:
return 0
sign = -1 if s[0] == '-' else 1
if s[0] in {'-', '+'}:
s = s[1:]
num = 0
for c in s:
if not c.isdigit[]:
break
num = num * 10 + ord[c] - ord['0']
if sign * num = 2**31 - 1:
return 2**31 - 1
return sign * num