个人记录-LeetCode 37. Sudoku Solver
来源:互联网 发布:淘宝女鞋品牌 编辑:程序博客网 时间:2024/06/11 20:15
问题:
Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character ‘.’ .
You may assume that there will be only one unique solution.
代码示例:
参考LeetCode 36. Valid Sudoku中判断Sudoku是否有效的第二种方法,
结合递归解决。
public class Solution { public void solveSudoku(char[][] board) { boolean[][] row = new boolean[9][9]; boolean[][] column = new boolean[9][9]; boolean[][] unit = new boolean[9][9]; for (int i = 0; i < 9; ++i) { for (int j = 0; j < 9; ++j) { if (board[i][j] == '.') { continue; } int loc = board[i][j] - '1'; row[i][loc] = true; column[j][loc] = true; unit[(i/3)*3 + j/3][loc] = true; } } findTheResult(board, row, column, unit, 0, 0); } private static boolean findTheResult(char[][] board, boolean[][] row, boolean[][] column, boolean[][] unit, int rowIndex, int columnIndex) { //找到本次应该写入值的位置 while(rowIndex < 9) { if (board[rowIndex][columnIndex] == '.') { break; } if (columnIndex == 8) { ++rowIndex; columnIndex = 0; } else { ++columnIndex; } } //写满了,说明找到结果 if (rowIndex == 9) return true; //每个位置,都试着写入所有可能的数 for (int k = 0; k < 9; ++k) { //不能重复 if (row[rowIndex][k] || column[columnIndex][k] || unit[(rowIndex/3)*3 + columnIndex/3][k]) { continue; } board[rowIndex][columnIndex] = (char)(k + '1'); row[rowIndex][k] = true; column[columnIndex][k] = true; unit[(rowIndex/3)*3 + columnIndex/3][k] = true; //递归写入下一个数 if (findTheResult(board, row, column, unit, rowIndex, columnIndex)) { return true; } else { //失败,复位本次的写入结果 board[rowIndex][columnIndex] = '.'; row[rowIndex][k] = false; column[columnIndex][k] = false; unit[(rowIndex/3)*3 + columnIndex/3][k] = false; } } return false; }}
0 0
- 个人记录-LeetCode 37. Sudoku Solver
- LeetCode --- 37. Sudoku Solver
- LeetCode 37.Sudoku Solver
- [Leetcode] 37. Sudoku Solver
- [leetcode] 37. Sudoku Solver
- Leetcode 37. Sudoku Solver
- leetcode 37. Sudoku Solver
- LeetCode 37. Sudoku Solver
- leetcode.37. Sudoku Solver
- LeetCode-37.Sudoku Solver
- leetcode 37. Sudoku Solver
- (Leetcode)37. Sudoku Solver
- [LeetCode] 37. Sudoku Solver
- leetcode 37.Sudoku Solver
- leetcode 37. Sudoku Solver
- leetcode 37. Sudoku Solver
- leetcode-37. Sudoku Solver
- [LeetCode]37. Sudoku Solver
- 从FILE_OBJECT里获取完整NT路径和DOS路径
- 超实用压力测试工具-ab工具
- 破解 jar 包之直接修改 .class 文件方式
- struts2框架如何使用websocket实现web程序消息推送
- LeetCode 219. Contains Duplicate II
- 个人记录-LeetCode 37. Sudoku Solver
- 使用编译好的OPENNI2的动态库与静态库进行Kinect2.0的ONI格式视频流录制
- Bebop2 FlightPlan 文件传输脚本结构
- HTTP协议简述
- 生产者消费者问题 这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者
- lintcode, 两个排序数组的中位数
- mybatis+oracle添加一条数据并返回所添加数据的自增列
- 勾股定理一日一证连载176
- Json