判斷 9×9 數獨盤面是否合法:每行、每列、每 3×3 子區塊包含數字 1-9 且不重複(空格用 '.' 表示)。
三次遍歷,每次用大小為 10 的布爾陣列/位掩碼記錄出現情況:
for i: check row ifor j: check col jfor bi=0,3,6; bj=0,3,6: check 3x3 blockclass Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int row[9] = {}, col[9] = {}, box[9] = {};
for (int i = 0; i < 9; ++i) {
for (int j = 0; j < 9; ++j) {
char c = board[i][j];
if (c == '.') continue;
int bit = 1 << (c - '1');
int b = (i/3)*3 + j/3;
if (row[i] & bit) return false; row[i] |= bit;
if (col[j] & bit) return false; col[j] |= bit;
if (box[b] & bit) return false; box[b] |= bit;
}
}
return true;
}
};
int 替代 bool[10],常數因子極小。(i/3)*3 + j/3 映射 0-8。O(81)。O(1)(固定 9×9)。O(1)。