आइए इस समस्या के विवरण से शुरू करते हैं:
उदाहरण के लिए:आपने संख्याओं की एक स्ट्रिंग के रूप में एन्कोड किया गया एक गुप्त संदेश इंटरसेप्ट किया है। संदेश को निम्नलिखित मैपिंग के माध्यम से डिकोड किया गया है:
"1" -> 'ए' "2" -> 'बी' ... "25" -> 'वाई' "26" -> 'जेड'
हालांकि, संदेश को डिकोड करते समय, आपको एहसास होता है कि आप कई अलग-अलग तरीकों से संदेश को डिकोड कर सकते हैं क्योंकि कुछ कोड अन्य कोड ("2" और "5" बनाम "25") में समाहित होते हैं।
उदाहरण के लिए, "11106" को इस प्रकार डिकोड किया जा सकता है:
- समूह के साथ "एएजेएफ" (1, 1, 10, 6)
- समूह के साथ "केजेएफ" (11, 10, 6)
- समूहीकरण (1, 11, 06) अमान्य है क्योंकि "06" एक वैध कोड नहीं है (केवल "6" मान्य है)।
ध्यान दें: ऐसे तार हो सकते हैं जिन्हें डिकोड करना असंभव हो।
केवल अंकों वाली एक स्ट्रिंग दी गई है, इसे डीकोड करने के तरीकों की संख्या लौटाएं। यदि संपूर्ण स्ट्रिंग को किसी वैध तरीके से डिकोड नहीं किया जा सकता है, तो 0 लौटाएँ।
परीक्षण मामले तैयार किए जाते हैं ताकि उत्तर32-बिट पूर्णांक में फिट हो जाए।
Input: s = "12" Output: 2 Explanation: "12" could be decoded as "AB" (1 2) or "L" (12).या:
Input: s = "12" Output: 2 Explanation: "12" could be decoded as "AB" (1 2) or "L" (12).या:
Input: s = "12" Output: 2 Explanation: "12" could be decoded as "AB" (1 2) or "L" (12).बाधाएँ हैं:
सबसे पहले, आइए सबसे सरल अंतर्दृष्टि से शुरू करें: एक वर्ण को स्वयं (केवल एक वर्ण के रूप में) या दो अंकों की संख्या के भाग के रूप में डिकोड किया जा सकता है।
यदि यह पहला विकल्प है, तो हमारे पास केवल 1 से 9 तक अंक हो सकते हैं, क्योंकि 0 अपने आप में किसी भी चीज़ से मैप नहीं किया जाता है।
हालाँकि, दो अंकों की संख्या 10 से 26 तक हो सकती है।
चढ़ने वाली सीढ़ियों के समान, हमें अपनी सरणी को लंबाई s.length 1 के साथ आरंभ करना होगा क्योंकि हमें इस तथ्य पर विचार करने की आवश्यकता है कि हमने अभी तक कुछ भी डिकोड नहीं किया है।
दूसरे शब्दों में, जब कोई अक्षर नहीं होते हैं, तो "डीकोड" करने का केवल
एक तरीका होता है: बिल्कुल भी डिकोड नहीं किया जाता।
Input: s = "12" Output: 2 Explanation: "12" could be decoded as "AB" (1 2) or "L" (12).फिर से, पिछली समस्याओं के समान, हमें नीचे के दो मान रखने होंगे, इसलिए हमें अपने सरणी के दूसरे स्लॉट को आरंभ करना होगा जो स्ट्रिंग में पहले अक्षर को डिकोड करने के तरीकों की संख्या से मेल खाता है।
हम जानते हैं कि यदि यह '0' है तो हम इसे डिकोड नहीं कर सकते हैं, इसलिए इस मामले में इसे डिकोड करने के तरीकों की संख्या 0 होगी।
ध्यान दें कि
डीकोड करने में सक्षम नहीं होना, बिल्कुल भी डिकोडिंग न करना से अलग है: पहले मामले में, डीकोड करने के तरीकों की संख्या 0 है, लेकिन दूसरे मामले में (जैसे हमने अभी dp[0]) के साथ किया, यह कहा जा सकता है कि डिकोड करने के तरीकों की संख्या 1 है।
एक तरीका है क्योंकि यह केवल एक ही अक्षर है। तो, हम तदनुसार dp[1] प्रारंभ करेंगे:
Input: s = "12" Output: 2 Explanation: "12" could be decoded as "AB" (1 2) or "L" (12).अब हम तीसरे सूचकांक से पुनरावृत्ति शुरू कर सकते हैं। हम एक ही समय में पिछले अंक और पिछले दो अंक दोनों को देखेंगे।
जब तक पिछला अंक संख्या 0 नहीं है, हम अपने सरणी के पिछले स्लॉट में जो कुछ भी है उसे जोड़ सकते हैं।
और, जब तक पिछले दो अंक एक संख्या बनाते हैं जो 10 और 26 के बीच है, हम उस संबंधित समाधान को भी जोड़ सकते हैं। कुल मिलाकर, यह इस तरह दिख सकता है:
Input: s = "12" Output: 2 Explanation: "12" could be decoded as "AB" (1 2) or "L" (12).कुल मिलाकर, हमारा समाधान इस तरह दिखता है:
पर) चूँकि हम एक निरंतर संचालन करते हुए सभी वर्णों के माध्यम से पुनरावृति करते हैं, और हमें एक सरणी रखनी होगी जिसका आकार हमारे इनपुट आकार के बढ़ने के साथ बढ़ेगा।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3