Đề bài
Dữ liệu do con người nhập vào thường lộn xộn. Bạn nhận một danh sách các chuỗi và phải cộng các chuỗi là số nguyên, bỏ qua phần còn lại thay vì làm chương trình bị lỗi.
Một mục được tính nếu, sau khi bỏ khoảng trắng ở cả hai đầu, nó là một dấu + hoặc - tùy chọn theo sau bởi một hoặc nhiều chữ số. Mọi thứ khác (chuỗi rỗng, số thập phân như "2.5", từ ngữ) đều bị bỏ qua.
Implement sum_valid_numbers(values).
Đầu vào
values: Các mục cần đọc.
Đầu ra
Trả về tổng các số nguyên hợp lệ (0 nếu không có số nào).
Ràng buộc
0 ≤ số mục ≤ 1,000
Mỗi mục có tối đa 20 ký tự; số hợp lệ vừa với số nguyên 64-bit
Ví dụ
Đầu vào:
values = ["10", " 5 ", "abc", "-3"]
Kết quả mong đợi:
expected = 12
Đầu vào:
std::vector<std::string> values = {"10", " 5 ", "abc", "-3"};
Kết quả mong đợi:
long long expected = 12;
Đầu vào:
string[] values = new string[] {"10", " 5 ", "abc", "-3"};
Kết quả mong đợi:
long expected = 12;
Giải thích
"10", " 5 " (đã bỏ khoảng trắng) và "-3" là số nguyên; "abc" bị bỏ qua. 10 + 5 - 3 = 12.
Đầu vào:
values = ["2.5", "", "seven"]
Kết quả mong đợi:
expected = 0
Đầu vào:
std::vector<std::string> values = {"2.5", "", "seven"};
Kết quả mong đợi:
long long expected = 0;
Đầu vào:
string[] values = new string[] {"2.5", "", "seven"};
Kết quả mong đợi:
long expected = 0;
Giải thích
Không mục nào là số nguyên nên tổng bằng 0.
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Bỏ khoảng trắng trước, rồi xét phần còn lại có phải số nguyên hợp lệ không.
Gợi ý 2
Đổi kiểu trong try/except (hoặc kiểm tra từng ký tự) giúp bỏ qua mục sai mà không dừng chương trình.
Gợi ý 3
Một dấu đứng riêng như "+" không phải là số.
Độ phức tạp mong đợi
thời gian O(tổng độ dài), bộ nhớ phụ O(1)
Tham khảo
Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.