Valid Sudoku
The Sudoku board could be partially filled, where empty cells are filled with the character
'.'.
A partially filled sudoku which is valid.
Thoughts:
Mark every used number in a row, column or block. When a re-marking occurs, return false. Note the method used to calculate the block ID using row and column indices.
Solution:
- // ⑨ ばか
 - #define BAKA 9
 - class Solution {
 - public:
 - bool isValidSudoku(vector<vector<char> > &board) {
 - array<bool, BAKA> row[BAKA];
 - array<bool, BAKA> col[BAKA];
 - array<bool, BAKA> box[BAKA];
 - // as standard C array
 - // the variables are not initialized...
 - for(auto r = 0; r < BAKA; ++r)
 - for(auto c = 0; c < BAKA; ++c)
 - row[r][c] = col[r][c] = box[r][c] = false;
 - for(auto r = 0; r < BAKA; ++r)
 - for(auto c = 0; c < BAKA; ++c)
 - {
 - char ch=board[r][c];
 - if (ch == '.')
 - continue; // blank, no effect
 - ch -= '1';
 - if (row[r][ch])
 - return false;
 - row[r][ch] = true;
 - if (col[c][ch])
 - return false;
 - col[c][ch] = true;
 - if (box[r / 3 * 3 + c / 3][ch])
 - return false;
 - box[r / 3 * 3 + c / 3][ch] = true;
 - }
 - return true;
 - }
 - };
 
No comments:
Post a Comment