[leetcode-37]Sudoku Solver(java)
2015-09-01 22:20
363 查看
问题描述:
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.
分析:这道题使用的是回溯算法,回溯本质是深搜+剪枝。深搜又常常利用递归,然后当替换每个“.”时都判断是否有效。如果有效的话,就继续递归下去。
注意,一般递归函数都在开头位置判断是否结束,但是对于该问题而言,不大容易判断叶节点。所以这里采用的是利用返回值true或false来对树的深度进行控制。如果为solve到false时,就回溯。回溯的手段就是使用更改函数主体复位,并return。
代码如下:328ms
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.
分析:这道题使用的是回溯算法,回溯本质是深搜+剪枝。深搜又常常利用递归,然后当替换每个“.”时都判断是否有效。如果有效的话,就继续递归下去。
注意,一般递归函数都在开头位置判断是否结束,但是对于该问题而言,不大容易判断叶节点。所以这里采用的是利用返回值true或false来对树的深度进行控制。如果为solve到false时,就回溯。回溯的手段就是使用更改函数主体复位,并return。
代码如下:328ms
[code]public class Solution { public void solveSudoku(char[][] board) { solve(board); } private boolean solve(char[][] board){ for(int row = 0;row<9;row++){ for(int col = 0;col<9;col++){ if(board[row][col] == '.'){ for(char i = '1';i<='9';i++){ board[row][col] = i; if(isValid(board,row,col) && solve(board)) return true; board[row][col] = '.'; } return false; } } } return true; } private boolean isValid(char[][] board,int row,int col){ for(int i = 0;i<9;i++){ if(i!=col && board[row][i] == board[row][col]) return false; } for(int i = 0;i<9;i++){ if(i!=row && board[i][col] == 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; } }
相关文章推荐
- 自学Java系列 笔记2 面向对象2
- SpringSecurity工作原理小解读
- 自学Java系列 笔记2 面向对象1
- 自学Java系列 笔记1 java的基本语法3
- Spring学习(十)spring mvc入门
- JAVA创建TXT,并写入数据
- 自学Java系列 笔记1 java的基本语法2
- 杭电ACM2054java做法
- java下properties属性文件操作
- 九月一号java小练习
- 也谈java浅克隆与深克隆
- 关于JDK环境变量的配置
- Java类加载相关知识
- 关于JDK的安装 下载 测试能否使用
- ubuntu 下java环境配置
- 韩顺平 java 第一讲 内容介绍,项目演示,原理剖析
- spring的scope讲解
- Spring boot Mybatis
- Spring boot Mybatis
- Spring boot Mybatis