Leetcode 36 Valid Sudoku

判断一个数独是否合法,即数独的每一行,每一列的数字不能有重复,每一个3*3的小数独中的数字不能有重复。

 1 class Solution {
 2 public:
 3     bool isValidSudoku(vector<vector<char> > &board) {
 4         int rowValid[10] = {0};//用于判断某一行是否合法
 5         int columnValid[10] = {0};//用于判断某一列是否合法
 6         int subBoardValid[10] = {0};//用于判断某一个九宫格是否合法
 7         for(int i = 0; i < 9; i++)
 8         {
 9           memset(rowValid, 0, sizeof(rowValid));
10           memset(columnValid, 0, sizeof(columnValid));
11           memset(subBoardValid, 0, sizeof(subBoardValid));
12           for(int j = 0; j < 9; j++)
13           {
14               if(!checkValid(rowValid, board[i][j]-'0') ||
15                  !checkValid(columnValid, board[j][i]-'0') ||
16                  !checkValid(subBoardValid, board[3*(i/3) + j/3][3*(i%3) + j%3]-'0'))
17                  return false;
18           }
19         }
20         return true;
21   }
22   bool checkValid(int vec[], int val)
23   {
24     if(val < 0)return true;//对应的是字符‘.’
25     if(vec[val] == 1)return false;
26     vec[val] = 1;
27     return true;
28   }
29 };

 

posted @ 2016-03-12 12:30  Breeze0806  阅读(120)  评论(0编辑  收藏  举报