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