LeetCode 52 [N-Queens II]

1192 ワード

原題
nクイーンズの問題に基づいて、具体的な配置レイアウトではなく、nクイーンズの異なる解決策の数を返します.
例としてn=4のように2つのソリューションが存在する
問題を解く構想.
  • はN-Queensよりも簡単です.boardを描く必要はありません.グローバル変数result
  • を維持するだけです.
  • 完全な構想はN-Queens
  • を参照
    完全なコード
    class Solution(object):
        result = 0
        def totalNQueens(self, n):
            """
            :type n: int
            :rtype: int
            """
            cols = []
            self.search(n, cols)
            return self.result
            
        def search(self, n, cols):
            if len(cols) == n:
                self.result += 1
                return
            
            for col in range(n):
                if not self.isValid(cols, col):
                    continue
                self.search(n, cols + [col])
    
        def isValid(self, cols, col):
            currentRowNumber = len(cols)
            for i in range(currentRowNumber):
                # same column
                if cols[i] == col:
                    return False
                # left-top to right-bottom
                if i - cols[i] == currentRowNumber - col:
                    return False
                # right-top to left-bottom
                if i + cols[i] == currentRowNumber + col:
                    return False
            return True