Problem:
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character ‘.‘
.
A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
Summary:
判断当前给出的数独是否满足条件。
Solution:
横向,纵向,每个3*3小方格分别判断。
1 class Solution { 2 public: 3 bool isValidSudoku(vector<vector<char>> board) { 4 int validRow[9] = { 0 }, validCol[9] = { 0 }; 5 int validSqr[9] = { 0 }; 6 7 for (int i = 0; i < 9; i++) { 8 memset(validRow, 0, sizeof(validRow)); 9 memset(validCol, 0, sizeof(validCol)); 10 11 for (int j = 0; j < 9; j++) { 12 if (board[i][j] != ‘.‘) { 13 char tmp = board[i][j]; 14 if (!validRow[tmp - ‘0‘ - 1]) { 15 validRow[tmp - ‘0‘ - 1]++; 16 } 17 else { 18 return false; 19 } 20 } 21 22 if (board[j][i] != ‘.‘) { 23 char tmp = board[j][i]; 24 if (!validCol[tmp - ‘0‘ - 1]) { 25 validCol[tmp - ‘0‘ - 1]++; 26 } 27 else { 28 return false; 29 } 30 } 31 } 32 } 33 34 for (int m = 0; m < 3; m++) { 35 for (int n = 0; n < 3; n++) { 36 memset(validSqr, 0, sizeof(validSqr)); 37 38 for (int i = m * 3; i < m * 3 + 3; i++) { 39 for (int j = n * 3; j < n * 3 + 3; j++) { 40 if (board[i][j] != ‘.‘) { 41 char tmp = board[i][j]; 42 if (!validSqr[tmp - ‘0‘ - 1]) { 43 validSqr[tmp - ‘0‘ - 1]++; 44 } 45 else { 46 return false; 47 } 48 } 49 50 } 51 } 52 } 53 } 54 55 return true; 56 } 57 58 };
原文:http://www.cnblogs.com/VickyWang/p/6243675.html