题目描述: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 '.'.
(确定数独是否有效,根据:数独谜题-规则。
数独板可以部分填充,其中空单元格充满字符。)
Note:A valid Sudoku board (partially filled) is not necessarily solvable.
Only the filled cells need to be validated.
(一个有效的数独板(部分填充)不一定是可解的。
The Sudoku board could be partially filled,
where empty cells are filled with the character '.'.
(确定数独是否有效,根据:数独谜题-规则。
数独板可以部分填充,其中空单元格充满字符。)
Note:A valid Sudoku board (partially filled) is not necessarily solvable.
Only the filled cells need to be validated.
(一个有效的数独板(部分填充)不一定是可解的。
只完整的数独板需要去验证。)
PS:这个题并不是让你去解数独,而是判断一个数独合法不合法。
数独规则:http://sudoku.com.au/TheRules.aspx
public class Valid_Sudoku {
public static String board[][]=new String[9][9];//数独面板
public static ArrayList al=new ArrayList();//用于判断有没有一样的数
public static boolean judge()
{
//检查行是否合格
for(int i=0;i<9;i++)
{
al.clear();
for(int j=0;j<9;j++)
{
if(al.contains(board[i][j])&&!board[i][j].equals("."))
{
return false;
}
else
{
if(!board[i][j].equals("."))
al.add(board[i][j]);
}
}
}
//检查列是否合格
for(int i=0;i<9;i++)
{
al.clear();
for(int j=0;j<9;j++)
{
if(al.contains(board[j][i])&&!board[j][i].equals("."))
{
return false;
}
else
{
if(!board[j][i].equals("."))
al.add(board[j][i]);
}
}
}
//检查九宫格内时候否合格
for(int partx=0;partx<3;partx++)
{
for(int party=0;party<3;party++)
{
al.clear();
for(int i=partx*3;i<partx*3+3;i++)
{
for(int j=party*3;j<party*3+3;j++)
{
if(al.contains(board[i][j])&&!board[i][j].equals("."))
{
return false;
}
else
{
if(!board[i][j].equals("."))
al.add(board[i][j]);
}
}
}
}
}
return true;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
String data=sc.next();
board[i][j]=data;
}
}
System.out.println(judge());
}
}