#leetcode#Valid Sudoku

来源:互联网 发布:java 服务器监控 编辑:程序博客网 时间:2024/06/01 08:26

参考了Code Ganker大神的思路, 


http://blog.csdn.net/linhuanmars/article/details/20748171


brute force, validate row by row, column by column,  then 9 sub-boxes of the grid.


public boolean isValidSudoku(char[][] board) {    if(board==null || board.length!=9 || board[0].length!=9)        return false;    for(int i=0;i<9;i++)    {        boolean[] map = new boolean[9];        for(int j=0;j<9;j++)        {            if(board[i][j] != '.')            {                if(map[(int)(board[i][j]-'1')])                {                    return false;                }                map[(int)(board[i][j]-'1')] = true;            }        }    }    for(int j=0;j<9;j++)    {        boolean[] map = new boolean[9];        for(int i=0;i<9;i++)        {            if(board[i][j] != '.')            {                if(map[(int)(board[i][j]-'1')])                {                    return false;                }                map[(int)(board[i][j]-'1')] = true;            }        }    }            for(int block=0;block<9;block++)    {        boolean[] map = new boolean[9];        for(int i=block/3*3;i<block/3*3+3;i++)        {            for(int j=block%3*3;j<block%3*3+3;j++)            {                if(board[i][j] != '.')                {                   if(map[(int)(board[i][j]-'1')])                   {                      return false;                   }                   map[(int)(board[i][j]-'1')] = true;                    }            }        }    }    return true;}


对于这9个小方格的检验, 起初没看明白下面这段是怎么对应各个小方格的。

 for(int block=0;block<9;block++)    {        boolean[] map = new boolean[9];        for(int i=block/3*3;i<block/3*3+3;i++)        {            for(int j=block%3*3;j<block%3*3+3;j++)            {


block             0 12345678i0, 1, 20, 1, 20, 1, 23, 4, 53, 4, 53, 4, 56, 7, 86, 7, 86, 7, 8j0, 1, 23, 4, 56, 7, 80, 1, 23, 4, 56, 7, 80, 1, 23, 4, 56, 7, 8

上表中每一列下标组合成一个小方格


0 0