【初级算法】10.有效的数独
题目:
判断一个 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.有效的数独相关推荐
- 初级算法-10. 有效的数独
题目描述: 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以 ...
- LeetCode 探索初级算法-数组:10 有效的数独-20200321
10 有效的数独-20200321 题目 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一 ...
- [算法]力扣刷题-初级算法 - 数组(三)(数组篇完结) [两数之和] [有效的数独] [旋转图像]
初级算法 - 数组篇完结: 初级算法 - 数组(一): https://blog.csdn.net/weixin_43854928/article/details/121315702 初级算法 - 数 ...
- LeetCode初级算法(数组)解答
这里记录了LeetCode初级算法中数组的一些题目: 加一 本来想先转成整数,加1后再转回去:耽美想到测试的例子考虑到了这个方法的笨重,所以int类型超了最大范围65536,导致程序出错. class ...
- LeetCode_初级算法_数组
LeetCode|初级算法_数组 题目如下: 1.1 从排序数组中删除重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间 ...
- 【力扣刷题笔记】初级算法
初级算法 数组 1.删除排序数组中的重复项 题目 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 ...
- leetcode探索专题中的初级算法练习题(python代码+解题思路)
本文记录leetcode探索专题中的初级算法练习题,附python实现代码&解题思路,做题过程不免查阅网络资料,侵删~如有错误,欢迎指正交流! 目录 专题一:数组: 26.从排序数组中删除重复 ...
- leetcode初级算法6.字符串转整数(atoi)
leetcode初级算法6.字符串转整数(atoi) 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法: public int myAtoi(String s) {//避免魔法值先设spaceS ...
- leetcode初级算法5.加一
leetcode初级算法5.加一 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法:(总结在代码中) public int[] plusOne(int[] digits) {//获取digits ...
- 图解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. ...
最新文章
- NetBeans使用介绍(五)
- 今天遇到一个很奇怪的问题,XP系统屏幕全部旋转90度
- 资讯|WebRTC M93 更新
- PC端连接Android设备进行adb调试
- samba 设置文件的读写权限
- 广东计算机考试1级时间安排,1级计算机考试时间
- 那些开源程序中让人叹为观止的代码 - 1 浏览器特性判断
- springboot使用@Async实现异步操作
- 图案怎么导入ps?Photoshop图案导入教程
- 3.7V转5V电路图芯片,3.7V升压5V的升压芯片
- WEB常用HTML颜色代码表
- 互联网的寒冬是否只是以讹传讹?
- windows11 任务栏 wifi、音量、电源还有通知无法左击弹出内容框
- python可以作为源文件后缀名的是_python 后缀名
- 2019年日本上班的你必须知道的社会保障和源泉所得税
- 如何下载微信公众号的音频文件
- 一位游戏大厂测试的一些知识分享
- Win-mac版 AE 2018安装附教程
- HDU5015 233 Matrix
- 什么是安拆网?安拆网有什么作用?