1. 题⽬链接:36.有效的数独
2. 题⽬描述:
3. 解法:
算法思路:
创建三个数组标记⾏、列以及 3*3 ⼩⽅格中是否出现1~9 之间的数字即可。
C++算法代码:
class Solution
{
bool row[9][10]; //行哈希表,记录某个数字是否存在过
bool col[9][10]; //列哈希表,记录某个数字是否存在过
bool grid[3][3][10]; //3*3局部块哈希表,记录某个数字是否存在过
public:
bool isValidSudoku(vector<vector<char>>& board)
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
if (board[i][j] != '.')
{
int num = board[i][j] - '0';
// 判断是否是有效的
if (row[i][num] || col[j][num] || grid[i / 3][j / 3][num])
return false;
row[i][num] = col[j][num] = grid[i / 3][j / 3][num] = true;
}
}
}
return true;
}
};
Java算法代码:
class Solution
{
boolean[][] row, col;
boolean[][][] grid;
public boolean isValidSudoku(char[][] board)
{
row = new boolean[9][10];
col = new boolean[9][10];
grid = new boolean[3][3][10];
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
{
if (board[i][j] != '.')
{
int num = board[i][j] - '0';
// 是否有效
if (row[i][num] || col[j][num] || grid[i / 3][j / 3][num])
return false;
row[i][num] = col[j][num] = grid[i / 3][j / 3][num] = true;
}
}
return true;
}
}