【Leetcode】【python】N-Queens/N-Queens II
2017-10-11 07:48
316 查看
N-Queens
题目大意
经典的八皇后问题的一般情况注意点:
皇后用”Q”表示,空白用”.”表示
解题思路
方法很多,见总结代码
回溯法
如图理解:class Solution(object): def solveNQueens(self, n): """ :type n: int :rtype: List[List[str]] """ self.n = n # 由于之后还要用到n,n作为类变量 result = [] columns = [-1 for i in range(n)] # [-1, -1, -1, -1] self.solve(columns, 0, result) return result def make_string_list(self, columns): sol = [] # 一个完整的棋盘 row = ['.' for i in range(self.n)] # ['.', '.', '.', '.'] for c in columns: new_row = row[:] new_row[c] = 'Q' sol.append(''.join(new_row)) # 将row转为new_row, 将Q加入,然后转为字符串 return sol def is_valid(self, columns, row, col): # print columns, 'hang', row, 'lie', col for r in range(row): c = columns[r] # print c, col if c == col: # 在同一列,放弃 return False if abs(c - col) == row - r: # 对角线,放弃 return False return True def solve(self, columns, row, result): if row == self.n: # 所有列处理完毕 # print 'columns:', columns # [1, 3, 0, 2], [2, 0, 3, 1] result.append(self.make_string_list(columns)) else: for col in range(self.n): # 依次遍历列,每个数字就代表每列皇后放在了第几行 if self.is_valid(columns, row, col): columns[row] = col self.solve(columns, row + 1, result)
N-Queens II
题目大意
em………….计算解的个数解题思路
稍微修改上题代码
class Solution(object): def totalNQueens(self, n): """ :type n: int :rtype: int """ self.n = n # 由于之后还要用到n,n作为类变量 self.result = 0 columns = [-1 for i in range(n)] # [-1, -1, -1, -1] self.solve(columns, 0, self.result) return self.result def is_valid(self, columns, row, col): # print columns, 'hang', row, 'lie', col for r in range(row): c = columns[r] # print c, col if c == col: # 在同一列,放弃 return False if abs(c - col) == row - r: # 对角线,放弃 return False return True def solve(self, columns, row, result): if row == self.n: # 所有列处理完毕 # print 'columns:', columns # [1, 3, 0, 2], [2, 0, 3, 1] self.result += 1 else: for col in range(self.n): # 依次遍历列,每个数字就代表每列皇后放在了第几行 if self.is_valid(columns, row, col): columns[row] = col self.solve(columns, row + 1, result)
总结
代码我都尽量详细注释,并且把重要变量print出来便于理解经典回溯法问题,解法很多,不过无外乎递归非递归等。
看到用位计算的,以后学习参考,效率两道题目都是最高的。
https://github.com/zhsj/nqueen/blob/master/N%E7%9A%87%E5%90%8E%E9%97%AE%E9%A2%98.md
相关文章推荐
- 【LeetCode with Python】 N-Queens II
- [LeetCode]题解(python):052-N-Queens II
- leetcode N-Queens/N-Queens II, backtracking, hdu 2553 count N-Queens, dfs
- 【Leetcode】【python】ZigZag Conversion
- leetcode 136 python
- [Leetcode][python]Max Points on a Line
- [LeetCode]N-Queens II
- Leetcode-2sum-python
- [LeetCode: Python]190. Reverse Bits
- 【Leetcode】【python】Generate Parentheses
- [leetcode] Unique Binary Search Trees @ Python
- [Leetcode]@python 110. Balanced Binary Tree
- python--leetcode 283. Move Zeroes
- (python)leetcode刷题笔记03 Longest Substring Without Repeating Characters
- 【leetcode】189. Rotate Array(Python & C++)
- leetcode(4),Move Zeroes详解(python)
- LeetCode 52 N-Queens II
- [leetcode]Search in Rotated Sorted Array @ Python
- [leetcode]Combination Sum II @ Python
- 【LEETCODE】81-Search in Rotated Sorted Array II [Python]