ধরুন আমরা একটি স্ট্রিং s আছে. s-এ 0 - 9 থেকে সংখ্যা রয়েছে এবং আমাদের আরও একটি সংখ্যা k আছে। আমাদেরকে [1, k] থেকে সংখ্যার তালিকা হিসাবে s-কে উপস্থাপন করা যেতে পারে এমন বিভিন্ন উপায়ে সংখ্যা খুঁজে বের করতে হবে। যদি উত্তরটি খুব বড় হয় তবে ফলাফল মোড 10^9 + 7 ফেরত দিন।
সুতরাং, যদি ইনপুটটি s ="3456" k =500 এর মতো হয়, তাহলে আউটপুট হবে 7, যেমন আমরা s এর মতো [3, 4, 5, 6], [34, 5, 6], [3, 4, 56], [3, 45, 6], [34, 56], [345, 6], [3, 456]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
m :=10^9 + 7
-
N :=s
এর আকার -
dp :=আকারের একটি তালিকা (N + 1) এবং 0
দিয়ে পূরণ করুন -
dp[N] :=1
-
N − 1 থেকে 0 রেঞ্জে i এর জন্য, 1 দ্বারা হ্রাস করুন, করুন
-
curr_val :=0
-
j-এর জন্য i থেকে N, করুন
-
curr_val :=curr_val * 10 + (s[j] সংখ্যা হিসাবে)
-
যদি curr_val 1 থেকে k রেঞ্জে থাকে, তাহলে
-
dp[i] :=(dp[i] + dp[j + 1]) mod m
-
-
অন্যথায়,
-
লুপ থেকে বেরিয়ে আসুন
-
-
-
-
dp[0]
ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
শ্রেণীর সমাধান:def solve(self, s, k):m =10 ** 9 + 7 N =len(s) dp =[0] * (N + 1) dp[N] =1 i এর জন্য পরিসীমা(N − 1, −1, −1):curr_val =0 এর জন্য j রেঞ্জে (i, N):curr_val =curr_val * 10 + int(s[j]) যদি 1 <=curr_val <=k:dp[ i] =(dp[i] + dp[j + 1]) % m else:ব্রেক রিটার্ন dp[0]ob =Solution()s ="3456"k =500print(ob.solve(s, k))প্রে>ইনপুট
"3456", 500আউটপুট
7