Đề bài
Ở mỗi bước, chọn một chữ số thập phân khác 0 hiện đang có trong số và trừ chữ số đó. Các chữ số được lấy từ giá trị mới sau mỗi bước. Hãy tìm số bước tối thiểu cần thiết để đạt đến số 0.
Cài đặt hàm removing_digits(n).
Đầu vào
n: Số nguyên dương ban đầu.
Đầu ra
Trả về số bước trừ ít nhất.
Ràng buộc
1 ≤ n ≤ 1.000.000. Không được phép trừ số 0 vì không có ý nghĩa.
Ví dụ
Đầu vào:
n = 14
Kết quả mong đợi:
expected = 3
Đầu vào:
long long n = 14;
Kết quả mong đợi:
long long expected = 3;
Đầu vào:
long n = 14;
Kết quả mong đợi:
long expected = 3;
Giải thích
14 → 10 → 9 → 0 sử dụng ba bước. Không có phép trừ đầu tiên nào có thể đạt đến 0 chỉ trong hai bước.
Đầu vào:
n = 7
Kết quả mong đợi:
expected = 1
Đầu vào:
long long n = 7;
Kết quả mong đợi:
long long expected = 1;
Đầu vào:
long n = 7;
Kết quả mong đợi:
long expected = 1;
Giải thích
Trừ chữ số duy nhất là 7 để đạt 0 ngay lập tức.
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Mỗi số phụ thuộc vào đáp án tốt nhất cho các số nhỏ hơn có thể đạt được bằng cách trừ đi một chữ số.
Gợi ý 2
Quy hoạch động trên tất cả giá trị đến n giúp tránh tính lặp lại.
Gợi ý 3
Nhớ rằng các chữ số khả dụng thay đổi sau mỗi lần trừ, và 0 không bao giờ là lựa chọn hợp lệ.
Độ phức tạp mong đợi
thời gian O(n * d), bộ nhớ phụ O(n)
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.