Menu
CoddyTech
flag Ar iconالعربيةdown icon

Decode Ways

تم تحويل رسالة مكوّنة من أحرف كبيرة إلى أرقام باستخدام الترميز 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.

lock icon+25 اختبارات مخفية عند الإرسال

challenge icon

سؤال إضافي

ماذا لو كان بإمكان s أن يحتوي أيضًا على *، الذي يمثّل أي رقم من 1 إلى 9؟ هل يمكنك حساب عدد القراءات في زمن O(n)، مع إرجاع العدد بترديد 10^9+7؟

إعادة ضبط الشيفرة
def numDecodings(s):
    # اكتب الكود هنا
حالات الاختبار

الحالة 1

الحالة 2

الحالة 3

المدخلات

s = "2611"

المتوقع

4