Valid Sudoku

来源:互联网 发布:科研数据采集和管理 编辑:程序博客网 时间:2024/05/11 14:44

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 '.'.


A partially filled sudoku which is valid.

Note:

A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

检查每一行,每一列,每一个3*3matrix是否有重复数字。

public boolean isValidSudoku(char[][] board) {for(int i=0;i<9;i++){boolean[] bn=new boolean[9];for(int j=0;j<9;j++){if(board[i][j]!='.'){if(bn[(int)board[i][j]-'1'])return false;bn[(int)board[i][j]-'1']=true;}}}for(int j=0;j<9;j++){boolean[] bn=new boolean[9];for(int i=0;i<9;i++){if(board[i][j]!='.'){if(bn[(int)board[i][j]-'1'])return false;bn[(int)board[i][j]-'1']=true;}}}for(int k=0;k<9;k++){for(int i=k/3*3;i<k/3*3+3;i++){boolean[] bn=new boolean[9];for(int j=k%3*3;j<k%3*3+3;j++){if(board[i][j]!='.'){if(bn[(int)board[i][j]-'1'])return false;bn[(int)board[i][j]-'1']=true;}}}}return true;}
简化的方法:

public boolean isValidSudoku2(char[][] board) {boolean[][] rows=new boolean[9][9];boolean[][] cols=new boolean[9][9];boolean[][] blocks=new boolean[9][9];for(int i = 0; i < 9; i++)  for(int j = 0; j < 9; j++)  {  if(board[i][j] == '.')continue;  int num = board[i][j] - '1';  if(rows[i][num] || cols[j][num] || blocks[i - i%3 + j/3][num])  return false;  rows[i][num] = cols[j][num] = blocks[i - i%3 + j/3][num] = true;  }  return true;}



0 0
原创粉丝点击