边工作边刷题:70天一遍leetcode: day 28

N-Queens II

如果和N-Queens I一样用dfs的方法,注意因为python或者java是pass by value,所以用返回值返回count。这里如何返回和累加容易搞混:因为dfs是树形结构,所以只在找到一个结果后(或者leaf结点)返回1,上层做累加,直到return back到顶层。

不过这题据说还有更精妙的方法,求知道的童鞋给提示。

class Solution(object):
    def totalNQueens(self, n):
        """
        :type n: int
        :rtype: int
        """
        def dfs(rn, n, pos):
            if rn >= n:
                return 1

            count = 0
            for j in range(n):
                valid = True
                for i in range(rn):
                    if pos[i]==j or abs(rn-i)==abs(j-pos[i]):
                        valid = False
                
                if valid:
                   pos[rn]=j
                   count+=dfs(rn+1, n, pos)
        
            return count
        count = 0
        pos = [-1 for i in range(n)]
        return dfs(0, n, pos)
                       
posted @ 2016-04-20 10:55  absolute100  阅读(84)  评论(0编辑  收藏  举报