题目:

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 '.' 表示。示例 1:输入:
[["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"]
]
输出: true
示例 2:输入:
[["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"]
]
输出: false
解释: 除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。
说明:一个有效的数独(部分已被填充)不一定是可解的。
只需要根据以上规则,验证已经填入的数字是否有效即可。
给定数独序列只包含数字 1-9 和字符 '.' 。
给定数独永远是 9x9 形式的。

解题思路:

本题初看起来比较怪异,实际只需要判断数据是否合规即可。数独9*9要求每一列的数据为1到9,每一行的数据为1到9.每一个3*3的block也为数字1到9.

因此只需要判断列,行,块是否合法即可。具体该数独有没有解不必关心。

代码:

class Solution {
public:bool isValidBlock(vector<vector<char>>& board,int x,int y){set<int> test;for(int i = x;i<x+3;++i){for(int j = y;j < y+3;++j){if(board[i][j] == '.'){continue;}if(!(board[i][j] <= '9' && board[i][j] >= '1')){return false;}if(board[i][j] <= '9' && board[i][j] >= '1'){if(test.find(board[i][j]-'0')==test.end()){test.insert(board[i][j]-'0');}else{return false;}}}}return true;}bool isValidRow(vector<vector<char>>& board,int row){set<int> test;for(int i = 0;i < 9;++i){if(board[row][i] == '.'){continue;}if(!(board[row][i] >= '1' && board[row][i] <= '9')){return false;}if(test.find(board[row][i]-'0')==test.end()){test.insert(board[row][i]-'0');}else{return false;}}return true;}bool isValidColum(vector<vector<char>>& board,int colum){set<char> test;for(int i = 0;i<9;++i){if(board[i][colum] == '.'){continue;}if(!(board[i][colum] <= '9' && board[i][colum] >= '1')){return false;}if(test.find(board[i][colum]-'0')==test.end()){test.insert(board[i][colum]-'0');}else{return false;}}return true;}bool isValidSudoku(vector<vector<char>>& board) {/*check row & colum*/for(int i = 0; i < 9; ++i){if(!isValidRow(board,i)||!isValidColum(board,i)){cout<<i<<endl;return false;}}/*check block*/for(int i = 0;i < 9; i += 3){for(int j = 0;j < 9; j += 3){if(!isValidBlock(board,i,j)){cout<<i<<j<<endl;return false;}}}return true;}
};

转载于:https://www.cnblogs.com/mikemeng/p/8983761.html

【初级算法】10.有效的数独相关推荐

  1. 初级算法-10. 有效的数独

    题目描述: 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以 ...

  2. LeetCode 探索初级算法-数组:10 有效的数独-20200321

    10 有效的数独-20200321 题目 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一 ...

  3. [算法]力扣刷题-初级算法 - 数组(三)(数组篇完结) [两数之和] [有效的数独] [旋转图像]

    初级算法 - 数组篇完结: 初级算法 - 数组(一): https://blog.csdn.net/weixin_43854928/article/details/121315702 初级算法 - 数 ...

  4. LeetCode初级算法(数组)解答

    这里记录了LeetCode初级算法中数组的一些题目: 加一 本来想先转成整数,加1后再转回去:耽美想到测试的例子考虑到了这个方法的笨重,所以int类型超了最大范围65536,导致程序出错. class ...

  5. LeetCode_初级算法_数组

    LeetCode|初级算法_数组 题目如下: 1.1 从排序数组中删除重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间 ...

  6. 【力扣刷题笔记】初级算法

    初级算法 数组 1.删除排序数组中的重复项 题目 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 ...

  7. leetcode探索专题中的初级算法练习题(python代码+解题思路)

    本文记录leetcode探索专题中的初级算法练习题,附python实现代码&解题思路,做题过程不免查阅网络资料,侵删~如有错误,欢迎指正交流! 目录 专题一:数组: 26.从排序数组中删除重复 ...

  8. leetcode初级算法6.字符串转整数(atoi)

    leetcode初级算法6.字符串转整数(atoi) 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法: public int myAtoi(String s) {//避免魔法值先设spaceS ...

  9. leetcode初级算法5.加一

    leetcode初级算法5.加一 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法:(总结在代码中) public int[] plusOne(int[] digits) {//获取digits ...

  10. 图解leetcode初级算法python版 pdf_图解LeetCode初级算法(Python版)

    第1章 浅谈算法 1.1 算法概述 1.2 度量算法 1.2.1 时间复杂度 1.2.2 空间复杂度 1.3 Python&Pythonic 第2章 基础算法之排序 2.1 冒泡排序 2.1. ...

最新文章

  1. NetBeans使用介绍(五)
  2. 今天遇到一个很奇怪的问题,XP系统屏幕全部旋转90度
  3. 资讯|WebRTC M93 更新
  4. PC端连接Android设备进行adb调试
  5. samba 设置文件的读写权限
  6. 广东计算机考试1级时间安排,1级计算机考试时间
  7. 那些开源程序中让人叹为观止的代码 - 1 浏览器特性判断
  8. springboot使用@Async实现异步操作
  9. 图案怎么导入ps?Photoshop图案导入教程
  10. 3.7V转5V电路图芯片,3.7V升压5V的升压芯片
  11. WEB常用HTML颜色代码表
  12. 互联网的寒冬是否只是以讹传讹?
  13. windows11 任务栏 wifi、音量、电源还有通知无法左击弹出内容框
  14. python可以作为源文件后缀名的是_python 后缀名
  15. 2019年日本上班的你必须知道的社会保障和源泉所得税
  16. 如何下载微信公众号的音频文件
  17. 一位游戏大厂测试的一些知识分享
  18. Win-mac版 AE 2018安装附教程
  19. HDU5015 233 Matrix
  20. 什么是安拆网?安拆网有什么作用?

热门文章

  1. 华为RH2288 V3 服务器 配置raid 删除raid配置
  2. 天冕数据开发平台通过信通院“大数据产品能力评测”
  3. 程序员生存定律--成长路上常见的坑
  4. js 根据时区转换日期格式
  5. 第三篇:读《今日简史》
  6. 2021年江苏镇江公务员考试报考指南
  7. 关于我为什么跨考计算机研究生以及对未来的思考
  8. 刻意练习(重点摘抄)
  9. REmap包介绍及使用
  10. C++线程池原理及创建