leetcode 之Valid Sudoku(七)

 判断行、列、九宫格内数字是否重复。

 按照行、列、九宫格进行检查即可。

 

bool validSudoku(const vector<vector<char>>& board)
      {
          bool used[9];
          for (int i = 0; i < 9; i++)
          {
              fill(used, used + 9, false);

              //检查行
              for (int j = 0; j < 9; j++)
              {
                  if(!check(board[i][j], used))
                      return false;
              }
              fill(used, used + 9, false);
              //检查列
              for (int j = 0; j < 9; j++)
              {
                  if (!check(board[j][i], used))
                      return false;
              }
          }
          //检查9个格子
          for (int i = 0; i < 3; i++)
          {
              for (int j = 0; j < 3; j++)
              {
                  fill(used, used + 9, false);

                  for (int r = 3 * i; r < 3 * i + 3; r++)
                  {
                      for (int c = 3 * j; c < 3 * j + 3; c++)
                      {
                          if (!check(board[i][j], used))
                              return false;
                      }
                  }
              }
          }

          return true;
      }
 bool check(char ch, bool used[9])
      {
          if (ch == '.') return true;
          if (used[ch - '1'])return false;

          return used[ch - '1'] = true;
      }
View Code

 

posted @ 2016-05-15 17:05  牧马人夏峥  阅读(181)  评论(0编辑  收藏  举报