Valid Sudoku - LeetCode
题目链接
注意点
- 题目要求判断的是当前的矩阵是否为数独矩阵,也就是当前给出的矩阵中每一行每一列每一个小矩阵是否有重复的数字
解法
解法一:三个标志矩阵,分别记录各行,各列,各小方阵是否出现某个数字,其中行和列标志下标很好对应,就是小方阵的下标需要稍稍转换一下。x的起始值为i/3*3
偏移量为j/3
,y的起始值为i%3*3
偏移量为j%3
。时间复杂度O(n^2)。
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int i,j;
for(i = 0;i < 9;i++)
{
int row[10] = {0};
int column[10] = {0};
int block[10] = {0};
for(j = 0;j < 9;j++)
{
if(board[i][j] != '.'&& ++row[board[i][j]-'0'] > 1) return false;
if(board[j][i] != '.'&& ++column[board[j][i]-'0'] > 1) return false;
if(board[i/3*3+j/3][i%3*3+j%3] != '.' && ++block[board[i/3*3+j/3][i%3*3+j%3]-'0'] > 1) return false;
}
}
return true;
}
};
小结
- 一开始理解成求该矩阵能否按数独规则求解了。。