leetcode 37. Sudoku Solver
2016-06-28 18:44
567 查看
public class Solution { public static void main(String[] args) { char[][] input = { {'5','3','.','.','7','.','.','.','.'}, {'6','.','.','1','9','5','.','.','.'}, {'9','8','.','.','.','.','.','6','.'}, {'8','.','.','.','6','.','.','.','3'}, {'4','.','.','8','.','3','.','.','1'}, {'7','.','.','.','2','.','.','.','6'}, {'.','6','.','.','.','.','2','8','.'}, {'.','.','.','4','1','9','.','.','5'}, {'.','.','.','.','8','.','.','7','9'} }; solveSudoku(input); } public static void solveSudoku(char[][] board) { solve(board); for(int i = 0;i<9;i++){ for(int j = 0;j<9;j++){ System.out.print(board[i][j]); } System.out.println(); } } public static boolean solve(char[][] board){ for(int i = 0;i<9;i++){ for(int j = 0;j<9;j++){ if(board[i][j] == '.'){ for(char m = '1';m<='9';m++){ //给'.'的位置按顺序赋1-9的值 board[i][j] = m; if(isValid(board,i,j)&&solve(board)){ //检查赋值后的矩阵是否合法,并迭代检查到最后是否合法 return true; } board[i][j] = '.'; } return false; } } } return true; } public static boolean isValid(char[][] board, int row ,int col){ //看是否在同行同列同九个格中有相同的值 for(int i = 0;i<9;i++){ if(i != row && board[i][col] == board[row][col]){ return false; } } for(int i = 0;i<9;i++){ if(i!=col && board[row][i] == board[row][col]){ return false; } } int beginRow = 3*(row/3); int beginCol = 3*(col/3); for(int i = beginRow;i<beginRow+3;i++){ for(int j = beginCol;j<beginCol+3;j++){ if(i!=row&&j!=col&&board[i][j] == board[row][col]){ return false; } } } return true; } }
相关文章推荐
- baidu记录2
- 今天给大家讲个故事
- 带缓存的字节输入输出流
- oracle出现IOU 10150错误,要彻底删除oracle注册信息
- 【Swift】Runtime动态性分析
- 【Swift】Runtime动态性分析
- windows下安装python,安装框架django。
- iOS 角度与弧度的转换
- WIKI服务搭建-JSPWIKI
- mysql 给表添加唯一约束、联合唯一约束,指定唯一约束的名字
- 基于Metronic的Bootstrap开发框架经验总结(10)--优化Bootstrap图标管理
- 获取本机外网ip和内网ip
- NGUI 指定视口大小
- 协方差的意义和解释(目前为止我看到的最为通俗易懂的文章)
- 嵌入式学习-uboot-lesson7-内存初始化
- 新浪OAuth网站登陆连接,请求access_token时遇到21323 miss client id or secret 的解决方案
- 基于RealSense的坐姿检测技术
- 获取网站Web服务器类型的办法
- C#实现上传图片
- Python中的迭代器与生成器高级用法解析