Bài toán: Cho số n. Ánh xạ chữ số 0-9 → a-j. Tạo chuỗi con từ các ký tự tương ứng, lặp lại cho đến độ dài = tổng các chữ số. Kiểm tra chuỗi có phải palindrome không.
Ví dụ
n = 43: chữ số 4→'e', 3→'d'. Chuỗi con = "ed". Tổng chữ số = 7.
Lặp "ed" → "ededede" (7 ký tự). Kiểm tra palindrome: "ededede" → True.
Triển khai Python
def is_palindrome(s):
return s == s[::-1]
def solve(n):
letters = "abcdefghij"
s = str(n)
substr = ""
total = 0
for ch in s:
d = int(ch)
substr += letters[d]
total += d
# Lặp substr cho đến độ dài ≥ total
result = ""
while len(result) < total:
result += substr
result = result[:total] # Cắt chính xác total ký tự
return is_palindrome(result)
# Test
print(solve(43)) # True: "ededede"
print(solve(42)) # False: "ececec" (6 chars) → "ececec" != "cecece"
print(solve(11)) # True: "bb" (sum=2) → "bb"
print(solve(10)) # False: "ab" (sum=1) → "a" palindrome? Wait sum=1+0=1, substr="ab", result="a" → True
Kết quả
True
Giải thích
- Ánh xạ: 0→a, 1→b, ..., 9→j.
- Tạo
substrtừ các ký tự tương ứng từng chữ số. - Tổng
total= tổng các chữ số. - Lặp
substrcho đến độ dài ≥total, cắt bớt. - Kiểm tra palindrome bằng
s == s[::-1]. - Độ phức tạp: O(total) ~ O(9 × số chữ số).