Menu
CoddyTech

Decode Ways

בינוניתכנון דינמיpython iconjava iconcpp iconc iconjs icon+10

הודעה באותיות גדולות קודדה באמצעות A = 1, B = 2 וכן הלאה עד Z = 26, והקודים נכתבו ללא מפרידים. בהינתן מחרוזת הספרות s, החזר כמה הודעות יכלו ליצור אותה.

אות נקראת מתוך ספרה אחת או שתי ספרות סמוכות, וקוד לעולם אינו מתחיל ב־0: 06 אינו 6, ו־0 בודד אינו אות. אם אין דרך לקרוא את המחרוזת, החזר 0.

פונקציה

numDecodings(s: string) → integer
sstring
מחרוזת הספרות לפענוח
מחזירהinteger
מספר הודעות האותיות שמקודדות ל-s

אילוצים

  • 1 ≤ s.length ≤ 100
  • s מכיל רק את הספרות 0 עד 9, והוא עשוי להתחיל ב-0.
  • לכל קידומת ולכל סיומת של s יש פחות מ־231 קריאות, ולכן התשובה וכל ספירה שתבנו בדרך נכנסות למספר שלם מסומן בן 32 סיביות.

דוגמאות

קלט
s = "2611"
פלט
4
הסבר
ארבע הקריאות הן 2 6 1 1 (BFAA), 26 1 1 (ZAA), 2 6 11 (BFK) ו־26 11 (ZK). הספרות האמצעיות אף פעם לא מתחברות לזוג, כי 61 גדול מ־26.
challenge icon

שאלת המשך

מה אם s יכול להכיל גם את *, שמייצג כל ספרה מ־1 עד 9? האם תוכל לספור את הקריאות בזמן O(n), מודולו 10^9+7?

איפוס הקוד
def numDecodings(s):
    # כתבו כאן את הקוד

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנט

s = "2611"

הפלט הצפוי

4