Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में टॉप-लेफ्ट से बॉटम-राइट तक पहुंचने के तरीकों की संख्या खोजने का प्रोग्राम


मान लीजिए हमारे पास एक N x M बाइनरी मैट्रिक्स है। जहां 0 का अर्थ खाली सेल है और 1 का अर्थ ब्लॉक्ड सेल है। अब टॉप-लेफ्ट कॉर्नर से शुरू करके, हमें बॉटम-राइट कॉर्नर तक पहुंचने के तरीकों की संख्या ढूंढनी है। यदि उत्तर बहुत बड़ा है, तो इसे 10^9 + 7 से मॉड करें।

उदाहरण के लिए, यदि इनपुट मैट्रिक्स है:

001
000
110

तो आउटपुट 2 होगा, क्योंकि बॉटम-राइट तक पहुंचने के दो तरीके हैं: [Right, Down, Right, Down] और [Down, Right, Right, Down]।

समाधान दृष्टिकोण

इस समस्या को हल करने के लिए हम डायनामिक प्रोग्रामिंग का उपयोग करेंगे:

  • dp := दिए गए मैट्रिक्स के आकार का मैट्रिक्स, 0 से भरा हुआ
  • dp[0][0] := 1
  • i को 1 से पंक्तियों की संख्या - 1 तक लूप चलाएं:
    • यदि matrix[i][0] == 1 है, तो लूप तोड़ें
    • अन्यथा, dp[i][0] := 1
  • j को 1 से कॉलम की संख्या - 1 तक लूप चलाएं:
    • यदि matrix[0][j] == 1 है, तो लूप तोड़ें
    • अन्यथा, dp[0][j] := 1
  • i को 1 से पंक्तियों - 1 तक, j को 1 से कॉलम - 1 तक लूप चलाएं:
    • यदि matrix[i][j] == 1 है, तो dp[i][j] := 0
    • अन्यथा, dp[i][j] := dp[i-1][j] + dp[i][j-1]
  • dp के बॉटम-राइट मान को लौटाएं

पायथन कार्यान्वयन

class Solution:
    def solve(self, matrix):
        dp = [[0] * len(matrix[0]) for _ in range(len(matrix))]
        dp[0][0] = 1
        for i in range(1, len(matrix)):
            if matrix[i][0] == 1:
                break
            else:
                dp[i][0] = 1
        for j in range(1, len(matrix[0])):
            if matrix[0][j] == 1:
                break
            else:
                dp[0][j] = 1
        for i in range(1, len(matrix)):
            for j in range(1, len(matrix[0])):
                if matrix[i][j] == 1:
                    dp[i][j] = 0
                else:
                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
        return dp[-1][-1]

ob = Solution()
matrix = [
    [0, 0, 1],
    [0, 0, 0],
    [1, 1, 0]
]
print(ob.solve(matrix))

इनपुट

matrix = [ [0, 0, 1], [0, 0, 0], [1, 1, 0] ]

आउटपुट

2
  1. - पायथन में लक्ष्य प्राप्त करने के लिए प्रतीकों को व्यवस्थित करने के तरीकों की संख्या ढूंढने का प्रोग्राम

    गैर-ऋणात्मक संख्याओं की सूची nums और पूर्णांक target दिया गया है। nums के प्रत्येक संख्या के सामने + या - चिह्न लगाकर व्यंजक का मूल्य target के बराबर करने के तरीकों की संख्या ढूंढें। उदाहरण इनपुट: nums = [2, 3, 3, 3, 2], target = 9 आउटपुट: 2 व्यंजक: -2 + 3 + 3 + 3 + 2 = 9 और 2 + 3 + 3 + 3 - 2 = 9।

  1. - Python में निचले दाएं कोने तक पहुंचने के लिए आवश्यक न्यूनतम सेल्स की संख्या खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक 2D ग्रिड है जो एक भूलभुलैया को दर्शाता है जहां 0 खाली स्थान के लिए है, और 1 दीवार है। हम grid[0, 0] से शुरू करेंगे, हमें ग्रिड के निचले दाएं कोने तक पहुंचने के लिए वर्गों की न्यूनतम संख्या ढूंढनी होगी। यदि हम पहुंच नहीं सकते, तो -1 लौटाएं। तो, यदि इनपुट इस तरह है 000 100 1

  1. - पायथन में संदेश को डिकोड करने के तरीकों की संख्या खोजने का प्रोग्राम

    मान लीजिए हमारे पास a = 1, b = 2, ... z = 26 जैसा मैपिंग है, और हमारे पास एक एन्कोडेड संदेश message स्ट्रिंग है, हमें उन तरीकों की संख्या गिननी है जिनसे इसे डिकोड किया जा सकता है। उदाहरण के लिए, यदि इनपुट message = 222 है, तो आउटपुट 3 होगा, क्योंकि इसे 3 तरीकों से डिकोड किया जा सकता है: bbb, bv, और