[LeetCode]Valid Sudoku

题目描述:(链接)

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.

解题思路:

先验证行,再验证列,最后验证小方格!

 1 class Solution {
 2 public:
 3     bool isValidSudoku(vector<vector<char>>& board) {
 4         bool used[9];
 5         
 6         for (int i = 0; i < 9; ++i) {
 7             memset(used, false, sizeof(used));
 8             for (int j = 0; j < 9; ++j) {
 9                 if (!isVaild(board[i][j], used)) {
10                     return false;
11                 }
12             }
13             
14             memset(used, false, sizeof(used));
15             for (int j = 0; j < 9; ++j) {
16                 if (!isVaild(board[j][i], used)) {
17                     return false;
18                 }
19             }
20         }
21         
22         for (int r = 0; r < 3; ++r) {
23             for (int c = 0; c < 3; ++c) {
24                 memset(used, false, sizeof(used));
25                 
26                 for (int i = r * 3; i < 3 * r + 3; ++i) {
27                     for (int j = c * 3; j < 3 * c + 3; ++j) {
28                         if (!isVaild(board[i][j], used)) {
29                             return false;
30                         }
31                     }
32                 }
33             }
34         }
35         
36         return true;
37     }
38 private:
39     bool isVaild(char c, bool *used) {
40         if (c == '.') {
41             return true;
42         }
43         
44         if (used[c - '1']) {
45             return false;
46         }
47         
48         used[c - '1'] = true;
49         return true;
50     }
51 };

 

posted @ 2015-10-08 22:34  skycore  阅读(139)  评论(0编辑  收藏  举报