标签:
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.
判断九宫格的合理性(并不一定有解),只需要依次判断行、列、9个子九宫格是否合理即可!
我的思维非常常规,代码效率比较慢,如下:
1 class Solution {
2 public:
3 bool isValidSudoku(vector<vector<char>>& board) {
4 map<char,int> mark;
5 for(int i=0;i<9;i++)
6 {
7 mark.clear();
8 for(int j=0;j<9;j++)//行是否合理
9 {
10 mark[board[i][j]]++;
11 if(board[i][j]!=‘.‘&&mark[board[i][j]]>1)
12 return false;
13 }
14 mark.clear();
15 for(int j=0;j<9;j++)//列是否合理
16 {
17 mark[board[j][i]]++;
18 if(board[j][i]!=‘.‘&&mark[board[j][i]]>1)
19 return false;
20 }
21 }
22 for(int i=0;i<3;i++)//检查9个子九宫格,控制行.每次3行(或者3列),我选择行或者说从上往下共3排,一次一排
23 {
24 mark.clear();
25 for(int j=3*i;j<3*i+3;j++)//第一列
26 for(int k=0;k<3;k++)
27 {
28 mark[board[j][k]]++;
29 if(board[j][k]!=‘.‘&&mark[board[j][k]]>1)
30 return false;
31 }
32 mark.clear();
33 for(int j=3*i;j<3*i+3;j++)//第二列
34 for(int k=3;k<6;k++)
35 {
36 mark[board[j][k]]++;
37 if(board[j][k]!=‘.‘&&mark[board[j][k]]>1)
38 return false;
39 }
40 mark.clear();
41 for(int j=3*i;j<3*i+3;j++)//第三列
42 for(int k=6;k<9;k++)
43 {
44 mark[board[j][k]]++;
45 if(board[j][k]!=‘.‘&&mark[board[j][k]]>1)
46 return false;
47 }
48 }
49 return true;
50 }
51 };
标签:
原文地址:http://www.cnblogs.com/chess/p/5080842.html