मान लीजिए कि हमारे पास एक तार एस है। s में 0 - 9 के अंक हैं और हमारे पास एक अन्य संख्या k भी है। हमें उन विभिन्न तरीकों की संख्या ज्ञात करनी है जिन्हें [1, k] से संख्याओं की सूची के रूप में दर्शाया जा सकता है। अगर उत्तर बहुत बड़ा है तो परिणाम मोड 10^9 + 7 लौटाएं।
इसलिए, यदि इनपुट s ="3456" k =500 जैसा है, तो आउटपुट 7 होगा, जैसा कि हम [3, 4, 5, 6], [34, 5, 6], [3] का प्रतिनिधित्व कर सकते हैं। 4, 56], [3, 45, 6], [34, 56], [345, 6], [3, 456]पी>
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
मी :=10^9 + 7
-
एन:=एस का आकार
-
dp :=आकार की एक सूची (N + 1) और 0 से भरें
-
डीपी [एन]:=1 पी>
-
मैं के लिए एन -1 से 0 की श्रेणी में, 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]) मॉड m
-
-
अन्यथा,
-
लूप से बाहर आएं
-
-
-
-
वापसी डीपी [0]
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def solve(self, s, k): m = 10 ** 9 + 7 N = len(s) dp = [0] * (N + 1) dp[N] = 1 for i in range(N − 1, −1, −1): curr_val = 0 for j in range(i, N): curr_val = curr_val * 10 + int(s[j]) if 1 <= curr_val <= k: dp[i] = (dp[i] + dp[j + 1]) % m else: break return dp[0] ob = Solution() s = "3456" k = 500 print(ob.solve(s, k))
इनपुट
"3456", 500
आउटपुट
7