s0036
This commit is contained in:
parent
68ca2ebbc9
commit
d40423a898
15
include/s0036_valid_sudoku.hpp
Normal file
15
include/s0036_valid_sudoku.hpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#ifndef S0036_VALID_SUDOKU_HPP
|
||||||
|
#define S0036_VALID_SUDOKU_HPP
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <unordered_map>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public:
|
||||||
|
bool isValidSudoku(vector<vector<char>>& board);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
38
src/s0036_valid_sudoku.cpp
Normal file
38
src/s0036_valid_sudoku.cpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#include "s0036_valid_sudoku.hpp"
|
||||||
|
|
||||||
|
bool Solution::isValidSudoku(vector<vector<char>>& board) {
|
||||||
|
vector<unordered_map<char, int>> rows;
|
||||||
|
vector<unordered_map<char, int>> columns;
|
||||||
|
vector<unordered_map<char, int>> grids;
|
||||||
|
// Initialize vectors
|
||||||
|
for (int i{0}; i < 9; ++i) {
|
||||||
|
rows.push_back(unordered_map<char, int>{});
|
||||||
|
columns.push_back(unordered_map<char, int>{});
|
||||||
|
grids.push_back(unordered_map<char, int>{});
|
||||||
|
}
|
||||||
|
for (int i{0}; i < 9; ++i) {
|
||||||
|
for (int j{0}; j < 9; ++j) {
|
||||||
|
if (board[i][j] == '.') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (rows[j].count(board[i][j]) == 1) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
rows[j][board[i][j]] = 1;
|
||||||
|
}
|
||||||
|
if (columns[i].count(board[i][j]) == 1) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
columns[i][board[i][j]] = 1;
|
||||||
|
}
|
||||||
|
int gridIndex =
|
||||||
|
static_cast<int>(floor(j / 3)) + 3 * static_cast<int>(floor(i / 3));
|
||||||
|
if (grids[gridIndex].count(board[i][j]) == 1) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
grids[gridIndex][board[i][j]] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
33
tests/s0036_valid_sudoku.cpp
Normal file
33
tests/s0036_valid_sudoku.cpp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include "s0036_valid_sudoku.hpp"
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
TEST(Problem36, Case1) {
|
||||||
|
vector<vector<char>> board{{'5', '3', '.', '.', '7', '.', '.', '.', '.'},
|
||||||
|
{'6', '.', '.', '1', '9', '5', '.', '.', '.'},
|
||||||
|
{'.', '9', '8', '.', '.', '.', '.', '6', '.'},
|
||||||
|
{'8', '.', '.', '.', '6', '.', '.', '.', '3'},
|
||||||
|
{'4', '.', '.', '8', '.', '3', '.', '.', '1'},
|
||||||
|
{'7', '.', '.', '.', '2', '.', '.', '.', '6'},
|
||||||
|
{'.', '6', '.', '.', '.', '.', '2', '8', '.'},
|
||||||
|
{'.', '.', '.', '4', '1', '9', '.', '.', '5'},
|
||||||
|
{'.', '.', '.', '.', '8', '.', '.', '7', '9'}};
|
||||||
|
bool o{true};
|
||||||
|
Solution solution;
|
||||||
|
EXPECT_EQ(solution.isValidSudoku(board), o);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Problem36, Case2) {
|
||||||
|
vector<vector<char>> board{{'8', '3', '.', '.', '7', '.', '.', '.', '.'},
|
||||||
|
{'6', '.', '.', '1', '9', '5', '.', '.', '.'},
|
||||||
|
{'.', '9', '8', '.', '.', '.', '.', '6', '.'},
|
||||||
|
{'8', '.', '.', '.', '6', '.', '.', '.', '3'},
|
||||||
|
{'4', '.', '.', '8', '.', '3', '.', '.', '1'},
|
||||||
|
{'7', '.', '.', '.', '2', '.', '.', '.', '6'},
|
||||||
|
{'.', '6', '.', '.', '.', '.', '2', '8', '.'},
|
||||||
|
{'.', '.', '.', '4', '1', '9', '.', '.', '5'},
|
||||||
|
{'.', '.', '.', '.', '8', '.', '.', '7', '9'}};
|
||||||
|
bool o{false};
|
||||||
|
Solution solution;
|
||||||
|
EXPECT_EQ(solution.isValidSudoku(board), o);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user