Study Plan For Algorithms - Part26
1. N 皇后
给定一个整数 n ,返回所有不同的 n 皇后问题 的解决方案,方案中 'Q' 和 '.' 分别代表了皇后和空位。
class Solution:
def solveNQueens(self, n: int) -> List[List[str]]:
def is_valid(board, row, col):
for i in range(row):
if board[i][col] == 'Q':
return False
if col - (row - i) >= 0 and board[i][col - (row - i)] == 'Q':
return False
if col + (row - i) < n and board[i][col + (row - i)] == 'Q':
return False
return True
def backtrack(board, row):
if row == n:
res.append([''.join(row) for row in board])
return
for col in range(n):
if is_valid(board, row, col):
board[row][col] = 'Q'
backtrack(board, row + 1)
board[row][col] = '.'
board = [['.' for _ in range(n)] for _ in range(n)]
res = []
backtrack(board, 0)
return res
2. N 皇后 II
给定一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。
class Solution:
def totalNQueens(self, n: int) -> int:
def is_valid(board, row, col):
for i in range(row):
if board[i][col] == 'Q':
return False
if col - (row - i) >= 0 and board[i][col - (row - i)] == 'Q':
return False
if col + (row - i) < n and board[i][col + (row - i)] == 'Q':
return False
return True
def backtrack(board, row):
if row == n:
return 1
count = 0
for col in range(n):
if is_valid(board, row, col):
board[row][col] = 'Q'
count += backtrack(board, row + 1)
board[row][col] = '.'
return count
board = [['.' for _ in range(n)] for _ in range(n)]
return backtrack(board, 0)
本文来自博客园,作者:WindMay,转载请注明原文链接:https://www.cnblogs.com/stephenxiong001/p/18403845

浙公网安备 33010602011771号