zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 29

    N-Queen I

    错误点:

    • 两个点在对角线上的比较条件:x坐标差和y坐标差相等
    • 在判断当前行和列是否valid的loop里不要做dfs
    • 因为是返回所有有效解,所以dfs为True不立即return,pass around结果list,在内层更新
    • python string和java string一样,immutable,所以不能set单个字符。用list之后join
    class Solution(object):
        def solveNQueens(self, n):
            """
            :type n: int
            :rtype: List[List[str]]
            """
            def dfs(cols, rn, n, res, solutions):
                if rn>=n:
                    resCp = list()
                    for i in range(len(res)):
                        resCp.append(''.join(res[i]))
                    solutions.append(resCp)
                    return True
                    
                for i in range(n):
                    valid = True
                    for k in range(rn):
                        if cols[k]==i or abs(cols[k]-i)==abs(k-rn):
                            valid = False
                            break
                    
                    if valid:
                        cols[rn]=i
                        res[rn][i]='Q'
                        dfs(cols, rn+1, n, res, solutions)
                        res[rn][i]='.'
    
                return False
            
            cols = [-1]*n
            res = [['.']*n for i in range(n)]
            solutions = []
            dfs(cols, 0, n, res, solutions)
            return solutions
            
    
  • 相关阅读:
    Spring
    华为OJ题目:扑克牌大小
    冒泡排序算法总结
    华为OJ题目:刷题
    求立方根
    假硬币问题求解
    SQL in Qt (一)
    Qt3D教程
    (Qt 翻译) QGLAbstractScene
    (Qt 翻译) QGLSceneNode
  • 原文地址:https://www.cnblogs.com/absolute/p/5678092.html
Copyright © 2011-2022 走看看