zoukankan      html  css  js  c++  java
  • 边工作边刷题: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)
                           
    
  • 相关阅读:
    @雅礼集训01/13
    @hdu
    @bzoj
    @hdu
    @bzoj
    @雅礼集训01/10
    @codeforces
    @spoj
    @bzoj
    @bzoj
  • 原文地址:https://www.cnblogs.com/absolute/p/5678078.html
Copyright © 2011-2022 走看看