题目描述(中等难度)
算法
(标记法)
- 对于每个已填的数,用row、col和box数组来表示当前位置是否可以填该数
- 如果出现冲突,则返回false
- 如果都不冲突,则返回true
时间复杂度是
C++代码
class Solution {
public:
// row[x][i]表示第x行是否已经填过数字i(1-9)
// col[y][i]表示第y行是否已经填过数字i(1-9)
// box[x / 3][y / 3][i]表示第[x/3,y/3]个box是否已经填过数字i(1-9)
bool row[9][10], col[9][10], box[3][3][10];
bool isValidSudoku(vector<vector<char>>& board) {
int n = board.size(), m = board[0].size();
for (int x = 0; x < n; x ++) {
for (int y = 0; y < m; y ++) {
if (board[x][y] != '.') {
int i = board[x][y] - '0';
if (row[x][i] || col[y][i] || box[x / 3][y / 3][i]) {
return false;
}
row[x][i] = col[y][i] = box[x / 3][y / 3][i] = true;
}
}
}
return true;
}
};
写在最后:我的博客主要是对计算机领域所学知识的总结、回顾和思考,把每篇博客写得通俗易懂是我的目标,分享技术和知识是一种快乐 ,非常欢迎大家和我一起交流学习,有任何问题都可以在评论区留言,也期待与您的深入交流(^∀^●)
来源:CSDN
作者:meteorsh
链接:https://blog.csdn.net/qq_43827595/article/details/104364148