From 83de8998d7d7cb82dffd93d32b7d2fc3f7071e47 Mon Sep 17 00:00:00 2001 From: SquidSpirit Date: Wed, 26 Feb 2025 00:09:19 +0800 Subject: [PATCH] feat: 36_valid_sudoku --- 36_valid_sudoku/main.cpp | 60 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 36_valid_sudoku/main.cpp diff --git a/36_valid_sudoku/main.cpp b/36_valid_sudoku/main.cpp new file mode 100644 index 0000000..86d81cd --- /dev/null +++ b/36_valid_sudoku/main.cpp @@ -0,0 +1,60 @@ +#include +using namespace std; + +class Solution { + public: + bool checkRepeat(bitset<9>& bs, char c) { + if (c != '.') { + int d = c - '1'; + if (bs[d]) return true; + bs.flip(d); + } + return false; + } + + bool isRowValid(vector>& board, int row) { + bitset<9> bs(0); + for (auto c : board[row]) { + if (checkRepeat(bs, c)) return false; + } + return true; + } + + bool isColValid(vector>& board, int col) { + bitset<9> bs(0); + for (int i = 0; i < 9; i++) { + char c = board[i][col]; + if (checkRepeat(bs, c)) return false; + } + return true; + } + + bool isSecValid(vector>& board, int row, int col) { + bitset<9> bs(0); + for (int i = row; i < row + 3; i++) { + for (int j = col; j < col + 3; j++) { + char c = board[i][j]; + if (checkRepeat(bs, c)) return false; + } + } + return true; + } + + bool isValidSudoku(vector>& board) { + for (int i = 0; i < 9; i++) { + if (!isRowValid(board, i)) return false; + } + + for (int i = 0; i < 9; i++) { + if (!isColValid(board, i)) return false; + } + + for (int i = 0; i < 9; i += 3) { + for (int j = 0; j < 9; j += 3) { + if (!isSecValid(board, i, j)) return false; + } + } + + return true; + } +};