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 };