Valid Sudoku leetcode

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

 

你可能感兴趣的:(Valid Sudoku leetcode)