ধরুন আমাদের কাছে 'a' =1, 'b' =2, ... 'z' =26 এর মতো ম্যাপিং আছে, এবং আমাদের কাছে একটি এনকোডেড বার্তা বার্তা স্ট্রিং আছে, আমাদের এটিকে ডিকোড করার উপায়গুলি গণনা করতে হবে৷পি>
সুতরাং, যদি ইনপুটটি বার্তা ="222" এর মতো হয়, তাহলে আউটপুট হবে 3, কারণ এটিকে 3 উপায়ে ডিকোড করা যেতে পারে:bbb, bv, এবং vb৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
memo :=0s আকারের একটি তালিকা বার্তা আকার + 1
এর মতোই -
মেমো[0] :=1
-
মেমো[1] :=1 যখন বার্তা[0] "0" এর মতো নয় অন্যথায় 0
-
আমি রেঞ্জ 2 থেকে বার্তার আকারের জন্য, করুন
-
n1 :=বার্তার সংখ্যাসূচক মান [সূচী i-1 থেকে i]
-
n2 :=বার্তার সাংখ্যিক মান [সূচক i-2 থেকে i]
-
n1_valid:=সত্য যখন n1> 0
-
n2_valid:=সত্য যখন n2> 9 এবং n2 <27
-
যদি n1_valid সত্য হয়, তাহলে
-
মেমো[i] :=মেমো[i] + মেমো[i-1]
-
-
যদি n2_valid সত্য হয়, তাহলে
-
মেমো[i] :=মেমো[i] + মেমো[i-2]
-
-
-
মেমোর শেষ উপাদান ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution: def solve(self, message): memo = [0 for i in range(len(message)+1)] memo[0] = 1 memo[1] = 1 if message[0]!="0" else 0 for i in range(2,len(message)+1): n1 = int(message[i-1:i]) n2 = int(message[i-2:i]) n1_valid= n1>0 n2_valid= n2>9 and n2<27 if n1_valid: memo[i]+=memo[i-1] if n2_valid: memo[i]+=memo[i-2] return memo[-1] ob = Solution() message = "2223" print(ob.solve(message))
ইনপুট
"2223"
আউটপুট
5