Menu
CoddyTech

Decode Ways

رُمِّزت رسالة مكوّنة من أحرف كبيرة باستخدام A = 1 وB = 2، وهكذا حتى Z = 26، وكُتبت الرموز من دون فواصل. عند إعطائك سلسلة الأرقام s، أعد عدد الرسائل التي يمكن أن تكون قد أنتجتها.

يُقرأ الحرف من رقم واحد أو رقمين متجاورين، ولا يبدأ أي رمز بـ0: فـ06 لا يساوي 6، والصفر المنفرد ليس حرفًا. إذا لم تنجح أي قراءة، فأعد 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