LeetCode刷题(8)
来源:互联网 发布:osi网络模型 编辑:程序博客网 时间:2024/06/15 14:35
Python数独求解
思路,先确定由行、列和小方块约束后的可能的数值集合,而后一一尝试,进行递归。
def solveSudoku(self, board): """ :type board: List[List[str]] :rtype: void Do not return anything, modify board in-place instead. """ self.board = board self.solve() def solve(self): flag = 1 for i in xrange(9): for j in xrange(9): if self.board[i][j] == '.': flag = 0 row = self.board[i] row_valid = self.num_valid(row) col = zip(*self.board)[j] col_valid = self.num_valid(col) square_i = i / 3 square_j = j / 3 square = [self.board[x][y] for x in range(square_i*3,square_i*3+3) for y in range(square_j*3,square_j*3+3)] square_valid = self.num_valid(square) valid = row_valid & col_valid & square_valid valid_list = [k for k in valid] if len(valid_list) == 0: return False else: print valid_list for num in valid_list: self.board[i][j] = num if self.solve(): return True self.board[i][j] = '.' return False if flag: return True def num_valid(self, unit): num = set('123456789') num_unit = set() unit = [i for i in unit if i != '.'] for i in unit: num_unit.add(i) return num - num_unit
报错:
self.board[i][j] = num: TypeError: ‘unicode’ object does not support item assignment
修改为self.board[i] = self.board[i][0:j]+num+self.board[i][j+1:],后同
此处为LeetCode测试数据,与提交数据格式不统一
算法优化:首先搜索候选长度为1的节点,不存在的情况下选择长度最短的节点
阅读全文
0 0
- LeetCode刷题(8)
- 【leetcode】leetcode 刷题 笔记 (不定期更新)
- Leetcode刷题(8)-tag(Array)
- leetcode刷题(Python)
- LeetCode刷题(1)
- LeetCode刷题(2)
- LeetCode刷题(3)
- LeetCode刷题(废弃)
- LeetCode刷题(FizzBuzz)
- Leetcode刷题(1)
- Leetcode刷题(2)
- Leetcode刷题(3)
- Leetcode刷题(4)
- Leetcode刷题(5)
- Leetcode刷题(6)
- Leetcode刷题(7)
- Leetcode刷题(13)
- Leetcode刷题(17)
- 心情复杂
- hdu1828 Picture(线段树+扫描线+矩形周长并)
- hdu-3016-Man Down(线段树)
- android6.0及以上获取wifi mac地址的方法(亲测可行)
- 模拟基本的RPC框架代码
- LeetCode刷题(8)
- 机器学习中的L0L1L2
- 去除inline-block元素间间距的几种方法
- 单例设计模式
- python学习第二天-操作列表
- HDU 1556 Color the ball【树状数组||前缀和】
- 将字符串转换为基本数据类型
- unity_NGUI系统学习(十六)_给控件对象添加可拖拽的功能和可调节大小的功能
- lesson7 数据类型及表示笔记