Posted onEdited onInLeetCodeDisqus: Symbols count in article: 879Reading time ≈1 mins.
O(1) time O(1) space
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
from copy import deepcopy classSolution: defisValidSudoku(self, board: List[List[str]]) -> bool: v = [[False] * 10for _ inrange(9)] h = [[False] * 10for _ inrange(9)] b = [[False] * 10for _ inrange(9)] # v = [[False] * 10 for _ in range(9)] # h, b = deepcopy(v), deepcopy(v) for r inrange(9): for c inrange(9): x = board[r][c] if x != '.': x = int(x) # 巧妙! if v[c][x] or h[r][x] or b[r // 3 * 3 + c // 3][x]: returnFalse v[c][x] = h[r][x] = b[r // 3 * 3 + c // 3][x] = True returnTrue
用bitset替代hashtable遍历找重复即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
classSolution { public: boolisValidSudoku(vector<vector<char>>& board){ vector<bitset<9>> h(9), v(9), s(9); for (int r(0); r < 9; ++r) { for (int c(0); c < 9; ++c) { if (board[r][c] == '.') continue; int x = board[r][c] - '1'; if (h[r][x] || v[c][x] || s[r / 3 * 3 + c / 3][x]) returnfalse; h[r][x] = v[c][x] = s[r / 3 * 3 + c / 3][x] = true; } } returntrue; } };