valid sodoku

来源:互联网 发布:南大地理 知乎 编辑:程序博客网 时间:2024/04/29 11:44
class Solution{    public:    bool isValidSudoku(vector<vector<char> > &board) {          // Note: The Solution object is instantiated only once.          vector<vector<bool>> rows(9, vector<bool>(9,false));          vector<vector<bool>> cols(9, vector<bool>(9,false));          vector<vector<bool>> blocks(9, vector<bool>(9,false));            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;      }  };

valid sodoku 分析:高度合并,把vector<bool>(9,false )判定是否合法的vector ,作为元素放入另一个vector,这样一次遍历就可以完成

例如:第一行 98155123,扫描到j=2,board[0][2]=1的时候,cols[2][0]检测 vector<bool> (9,false)中是否为TRUE,若为true ,则返回FALSE;

对于9个宫的检测:

第二个宫  i=0,1,2 ;j=3,4,5

blocks[i-i%3+j/3]=blocks[0+1]=blocks[1] 表示第2个宫   [num]表示宫里的数

第四个宫:i=3,4,5  ;j=0,1,2

blocks[3-3%3+j/3]=blocks[3] 索引是3,表示第4个宫

0 0
原创粉丝点击