70. Valid Sudoku

来源:互联网 发布:索罗斯期货软件 编辑:程序博客网 时间:2024/04/29 19:06

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.

分析:题目要求是分析给定的二维数组是否为可解的数独棋盘。这就要求:1.每行出现的1-9的数字不能重复;2.每列出现的1-9的数字不能重复;3.每宫内出现的1-9的数字不能重复。

/** 符合条件的数独是满足每一行、每一列、每一个粗线宫内的数字均含1-9,不重复。  *  判断一个目前的数独是否可解,只需要满足每一行、每一列和每一个宫内的元素不重复即可。 */public boolean isValidSudoku(char[][] board) {Set rowSet = new HashSet();/* 当前行集合 */Set columnSet = new HashSet();/* 当前列集合 *//*Step1:先判断某行某列是否不重复*/for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) {if (board[i][j] != '.') {if (rowSet.contains(board[i][j])) {/* 包含重复元素则返回false */return false;} else {rowSet.add(board[i][j]);}}if (board[j][i] != '.') {if (columnSet.contains(board[j][i])) {return false;} else {columnSet.add(board[j][i]);}}}/* 如果需要继续下一个循环的话,则应该清空这两个集合 */rowSet.clear();columnSet.clear();}Set roomSet = new HashSet();/* 当前行集合 *//*Step2:判断每个宫内元素是否不重复*/for(int i=0;i<9;i=i+3){for(int j = 0;j<9;j=j+3){for(int row=i;row<i+3;row++){for(int col=j;col<j+3;col++){if (board[row][col] != '.') {if (roomSet.contains(board[row][col])) {/* 包含重复元素则返回false */return false;} else {roomSet.add(board[row][col]);}}}}roomSet.clear();//计算下一宫的元素之前,把这一个宫内的元素清0}}return true;}

0 0
原创粉丝点击