Leetcode 22 Generate Parentheses

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

Input: n = 3
Output: ["((()))","(()())","(())()","()(())","()()()"]
Input: n = 1
Output: ["()"]
  • Soruda bize n sayısı veriliyor.Ve bu n sayısı kadar parantes kullanarak kaç farklı düzgün “()” parantez kombinasyonu yapabiliriz diye soruyor.
  • Algoritma çıkarmak için temel kurallar koymak istersek eğer 3 temel kural bulabiliriz.
  • Açık parantezi sadece açık parantez sayısı < n ise ekle
  • Kapalı parantezi sadece kapalı parantez sayısı < açık parantez sayısı ise ekle
  • Eğer açık parantez sayısı == kapalı parantez sayısı == n ise oluşan kombinasyonu sonuç listesine ekle.
  • Oluşturacağımız backtrack fonksiyonunda bu kontrolleri yaparsak rekürsif olarak fonksiyonu çağırarak kombinasyonları bulabiliriz.
    def generateParenthesis(self, n: int) -> List[str]:
        
        parent = []
        res = []
        
        def backtrack(openN,closedN):
            if openN == closedN == n:
                res.append("".join(parent))
                return
            if openN < n:
                parent.append("(")
                backtrack(openN + 1,closedN)
                parent.pop()
            
            if closedN <openN:
                parent.append(")")
                backtrack(openN,closedN + 1)
                parent.pop()
                
        backtrack(0,0)
        return res