你的位置:首页 > Java教程

[Java教程]LintCode389.判断数独是否合法


LintCode简单题:判断数独是否合法

问题描述:

请判定一个数独是否有效。

该数独可能只填充了部分数字,其中缺少的数字用 . 表示。

注意事项:

一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。

样例:

下列就是一个合法数独的样例。


 

分析:关于如何判断数独有效其实很简单,玩过的都知道,数独的每一行,每一列,每一个3*3的矩阵中不能出现重复的数字而且必须是1-9。那么Java代码是怎么完成的呢?

 

class Solution {  /**   * @param board: the board    @return: wether the Sudoku is valid   */  private Set<Character> set = new HashSet<Character>();    public boolean isValidSudoku(char[][] board) {        //row    for (int i = 0; i < 9; i++) {      for(int j = 0; j < 9; j++) {        if(!check(board[i][j])) return false;       }      set.clear();    }    //column    for (int i = 0; i < 9; i++) {      for(int j = 0; j < 9; j++) {        if(!check(board[j][i])) return false;       }      set.clear();    }    //sub matrix    for (int i = 0; i < 9; i++) {      for(int j = 0; j < 9; j++) {        if(!check(board[i/3*3 + j/3][i%3*3 + j%3])) return false; //这一行关于矩阵的处理是最亮的部分      }      set.clear();    }    return true;  }  public boolean check(char c) {    if(c == '.') {      return true;    } else if(c >= '1' && c <= '9') {      if (set.contains(c)) {        return false;      } else {        set.add(c);        return true;      }    } else {      return false;    }  }};