タイトル:整数を考えるNは、戻りN個の女王の異なる解の数。
出典ます。https://leetcode-cn.com/problems/n-queens-ii/
アクトワン:独自のコードの90%以上
アイデア:特に、最初の列の中間奇数行を計算するために、偶数対称直接使用、奇数および偶数、それぞれ算出
クラスソリューション: DEF totalNQueens(セルフ、N-ます。int) - > int型: 結果 = [0] DEFバックトラックは(half_col、行= -1、COL = 0、): #バックの終了条件は、最後の行ならば、見つけることを示します格納された溶液 IF行1-N - ==。 :# 溶液= [] #_ため、ソートされたCOL(クイーンズ)において:# solution.append(COL * + 'Q' * +(N '' '' - COL - 1)) #results.append(溶液)#の印刷(結果) 。結果[0] =結果[0] + 1 戻り 行。+ = 1 IF(行== 0): #対称線に最初に起因して、その結果場合nは奇数であり、半分だけトラバース列の ための COL でhalf_col: IF COLS [COL] + P [COL +ロウ] + Q [COL-行] == 0: queens.add((行、COL)) COLS [COL] = 1つの P [COL +行]。1 = Q [COL行×] = 1 バックトラック(half_col、行、COL) queens.remove((行、COL)) COLS [COL]が = 0 P [COL +ロウ] = 0 Q [COL-行] = 0 他の: のための COL で:レンジ(N) IF colsの[COL] + P [COL +ロウ] + Q [COL-行] == 0: queens.add((行、COL)) colsの[ COL] = 1 P [COL +行]。1 = Q [COL行×]。1 = #音符に移し、ここで特別なパラメータ、位置パラメータ通過しなければならない #バックトラック元の書き込みエラーである(行、COL) バックトラックを(half_col、行、COL) queens.remove((行、COL)) COLS [COL] = 0 P [COL +ロウ] = 0 Q [COL -行] = 0 COLS = [0] * N- P = [0] *(2 * N - 1 ) Q = [0] *(2 * N - 1 ) クイーンズ = SET() のiF、N%2 == 0: バックトラック(half_col =レンジ(INT(N / 2 ))) 、戻り結果[0] * 2 #時点後にN奇数で、カラムの横断半分となって、もカラム中間横断 他の: バックトラック(half_col =レンジ(INT(N / 2 ))) 結果[0]結果= [0] * 2 #、中央数はINT(N / 2)は、nが奇数であることに注意され バックトラック(half_col = INT(N / 2 )]) 戻り結果[0] IF __name__ == ' __main__ ' : duixiang = ソリューション() WW = duixiang.totalNQueens(1。 ) 印刷(' 結果:'、WW)