36 Valid Sudoku
2015-08-19 15:31
225 查看
/*
* 需要判断
* (1)每一行
* (2)每一列
* (3)九个子正方形
* 是否都满足没有重复的数字
* 测试矩阵:
* char[][] board = {
{'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'}
};
*/
public class Solution {
public boolean isValidSudoku(char[][] board) {
if(board==null) return false;
int cols = board[0].length;
int rows = board.length;
for(int i=0;i<rows;++i){
if(!judgeRow(board, i)) return false;
}
for(int j=0;j<cols;++j){
if(!judgeCol(board, j)) return false;
}
for(int i=0;i<rows;i+=3){
for(int j=0;j<cols;j+=3){
if(!judgeRec(board,i,j)) return false;
}
}
return true;
}
public boolean judgeRow(char[][] board, int row){
int[] vis = new int[10];
Arrays.fill(vis, 0);
int cols = board[row].length;
for(int j=0;j<cols;++j){
if(board[row][j]=='.'){
continue;
}
int tmp = new Integer(board[row][j] - '0');
if(vis[tmp]==0){
vis[tmp] = 1;
}else{
return false;
}
}
return true;
}
public boolean judgeCol(char[][] board, int col){
int[] vis = new int[10];
Arrays.fill(vis, 0);
int rows = board.length;
for(int i=0;i<rows;++i){
if(board[i][col]=='.'){
continue;
}
int tmp = new Integer(board[i][col] - '0');
if(vis[tmp]==0){
vis[tmp] = 1;
}else{
return false;
}
}
return true;
}
public boolean judgeRec(char[][] board, int row, int col){
int[] vis = new int[10];
Arrays.fill(vis, 0);
for(int i=row;i<row+3;++i){
for(int j=col;j<col+3;++j){
if(board[i][j]=='.') continue;
int tmp = new Integer(board[i][j] - '0');
if(vis[tmp]==0){
vis[tmp] = 1;
}else{
return false;
}
}
}
return true;
}
}
* 需要判断
* (1)每一行
* (2)每一列
* (3)九个子正方形
* 是否都满足没有重复的数字
* 测试矩阵:
* char[][] board = {
{'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'}
};
*/
public class Solution {
public boolean isValidSudoku(char[][] board) {
if(board==null) return false;
int cols = board[0].length;
int rows = board.length;
for(int i=0;i<rows;++i){
if(!judgeRow(board, i)) return false;
}
for(int j=0;j<cols;++j){
if(!judgeCol(board, j)) return false;
}
for(int i=0;i<rows;i+=3){
for(int j=0;j<cols;j+=3){
if(!judgeRec(board,i,j)) return false;
}
}
return true;
}
public boolean judgeRow(char[][] board, int row){
int[] vis = new int[10];
Arrays.fill(vis, 0);
int cols = board[row].length;
for(int j=0;j<cols;++j){
if(board[row][j]=='.'){
continue;
}
int tmp = new Integer(board[row][j] - '0');
if(vis[tmp]==0){
vis[tmp] = 1;
}else{
return false;
}
}
return true;
}
public boolean judgeCol(char[][] board, int col){
int[] vis = new int[10];
Arrays.fill(vis, 0);
int rows = board.length;
for(int i=0;i<rows;++i){
if(board[i][col]=='.'){
continue;
}
int tmp = new Integer(board[i][col] - '0');
if(vis[tmp]==0){
vis[tmp] = 1;
}else{
return false;
}
}
return true;
}
public boolean judgeRec(char[][] board, int row, int col){
int[] vis = new int[10];
Arrays.fill(vis, 0);
for(int i=row;i<row+3;++i){
for(int j=col;j<col+3;++j){
if(board[i][j]=='.') continue;
int tmp = new Integer(board[i][j] - '0');
if(vis[tmp]==0){
vis[tmp] = 1;
}else{
return false;
}
}
}
return true;
}
}
相关文章推荐
- linux防火墙和SELinux
- EF里一对一、一对多、多对多关系的配置和级联删除
- 生成一行html
- 编写高质量代码改善C#程序的157个建议——建议76: 警惕线程的优先级
- jQuery.extend()源码解读
- iOS开发学习之UIApplication
- 64位win7下安装numpy,scipy,matplotlib
- MFC WORD void*输出
- Android中ActivityManager(AM)的方法解释和几个使用场景介绍
- copy和mutableCopy的区别
- BZOJ 1692 [Usaco2007 Dec]队列变换 暴力(正解后缀数组)
- Java技术与Java虚拟机
- 微软官方展示真正的Win10预览版10527版本信息
- 桌面支持--CANNON佳能打印机不能接收打印指令
- Tcp重传
- pem证书
- Oracle和mysql的一些简单区别
- Spring Mvc 源码理解。
- HDU 3016 Man Down(线段树区间单点查询+DP)
- 原码, 反码, 补码 详解