#经典回溯,极简python解答
class Solution:
    def Nqueen(self , n ):

        #col: 存储已有的列信息,如[1,4]含义为第1行第1列和第2行第4列已经存放了
        #ld:  存储已有的左下对角线信息,特点是行(i) - 列(j)为固定值
        #ru:  存储已有的右上对角线信息,特点是行(i) + 列(j)为固定值
        def backtrack(col, ld, ru):
            if len(col) == n:
                self.res += 1
                return
            i = len(col)
            for j in range(n):
                if j not in col and i + j not in ru and i - j not in ld:
                    backtrack(col+[j], ld + [i - j], ru + [i + j])

        self.res = 0    
        backtrack([], [], [])
        return self.res