【leetcode】Valid Sudoku (easy)
发布日期:2021-10-23 14:13:20 浏览次数:8 分类:技术文章

本文共 3329 字,大约阅读时间需要 11 分钟。

题目:就是判断已有的数字是否冲突无效,若无效返回flase 有效返回true 不要求sudo可解

用了char型的数字,并且空格用‘.'来表示的。

 

思路:只要分别判断横向 竖向 3*3小块中的数字是否有重复或者无效就可以了  就是单纯的麻烦 不难

#include
#include
using namespace std;class Solution {public: bool isValidSudoku(vector
> &board) { vector
hash; //纵向判断 for(int c = 0; c < 9; c++) //对每一列判断 { hash.clear(); hash.resize(10); //每次判断前 hash要清零 for(int r = 0; r < 9; r++) { if(board[r][c] == '.') //空白跳过 { continue; } else if(board[r][c] <= '9' && board[r][c] >= '0') //是数字 { if(hash[board[r][c] - '0'] != 0) //若已经有过 无效 { return false; } else { hash[board[r][c] - '0']++; } } else //不是空白 不是数字 无效 { return false; } } } //横向判断 for(int r = 0; r < 9; r++) //对每一行判断 { hash.clear(); hash.resize(10); for(int c = 0; c < 9; c++) { if(board[r][c] == '.') { continue; } else if(board[r][c] <= '9' && board[r][c] >= '0') { if(hash[board[r][c] - '0'] != 0) { return false; } else { hash[board[r][c] - '0']++; } } else { return false; } } } //小矩形判断 hash.clear(); hash.resize(10); for(int r = 0; r < 9; r+=3) //对每一行判断 { for(int c = 0; c < 9; c+=3) { hash.clear(); hash.resize(10); for(int rr = r; rr < r + 3; rr++) { for(int cc = c; cc < c + 3; cc++) { if(board[rr][cc] == '.') { continue; } else if(board[rr][cc] <= '9' && board[rr][cc] >= '0') { if(hash[board[rr][cc] - '0'] != 0) { return false; } else { hash[board[rr][cc] - '0']++; } } else { return false; } } } } } return true; }};int main(){ Solution s; vector
> sudo; vector
sub; char c; for(int i = 0; i < 9; i++) { sub.clear(); for(int j = 0; j < 9; j++) { scanf("%c ", &c); sub.push_back(c); } sudo.push_back(sub); } bool b = s.isValidSudoku(sudo); return 0;}

 

转载于:https://www.cnblogs.com/dplearning/p/4110201.html

转载地址:https://blog.csdn.net/weixin_30588827/article/details/98962287 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:关于ssh的介绍
下一篇:python 并发协程

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月19日 12时38分25秒