昨天没更新,是因为最近和同学在追天池的一个比赛,昨天写程序了。再加上回来有点累了,就没写。今天早点更新。毕竟还有3个粉丝。。。哈哈哈哈哈哈
题目:Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.The Sudoku board could be partially filled, where empty cells are filled with the character'.'
.
![](https://img.haomeiwen.com/i9034453/a4b00ad438c505d7.png)
思路:这个题开始一看感觉很难,但是仔细想一下其实不难,根据规则,其实就是三个限制条件:每行中不能出现重复的1-9,每列不能出现重复的1-9,每个3*3子矩阵不能重复。那么就根据这三个规则依次遍历待判断的矩阵中每个元素就可以了。Java代码如下:
public static boolean IsValidSudoku(char[][] board) {
boolean result=true;
//判断每行是否满足规则
for(int i=0;i<board.length;i++)
{
int[] count={0,0,0,0,0,0,0,0,0};
for(int j=0;j<board[i].length;j++)
{
if(board[i][j]!='.')
{
if(count[Integer.parseInt(String.valueOf(board[i][j]))-1]>0)
{
return false;
}
else
{
count[Integer.parseInt(String.valueOf(board[i][j]))-1]++;
}
}
else
{
continue;
}
}
}
//判断每列是否满足规则
for(int j=0;j<board.length;j++)
{
int[] count={0,0,0,0,0,0,0,0,0};
for(int i=0;i<board[j].length;i++)
{
if(board[i][j]!='.')
{
if(count[Integer.parseInt(String.valueOf(board[i][j]))-1]>0)
{
return false;
}
else
{
count[Integer.parseInt(String.valueOf(board[i][j]))-1]++;
}
}
else
{
continue;
}
}
}
//判断3*3子矩阵是否满足规则
for(int i=0;i<board.length;i=i+3)
{
for(int j=0;j<board.length;j=j+3)
{
int[] count={0,0,0,0,0,0,0,0,0};
for(int row=i;row<i+3;row++)
{
for(int col=j;col<j+3;col++)
{
if(board[row][col]!='.')
{
if(count[Integer.parseInt(String.valueOf(board[row][col]))-1]>0)
{
return false;
}
else
{
count[Integer.parseInt(String.valueOf(board[row][col]))-1]++;
}
}
else
{
continue;
}
}
}
}
}
return result;
}
注意count数组的位置。
网友评论