Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Kiểm tra số N có tạo được chuỗi palindrome theo quy tắc a-j không (Python)

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 substr từ các ký tự tương ứng từng chữ số.
  • Tổng total = tổng các chữ số.
  • Lặp substr cho đế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ố).