iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现验证数独的方法
  • 429
分享到

C++实现验证数独的方法

2023-06-20 16:06:09 429人浏览 薄情痞子
摘要

本篇内容主要讲解“c++实现验证数独的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++实现验证数独的方法”吧!Valid Sudoku 验证数独Determine if a 9

本篇内容主要讲解“c++实现验证数独的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++实现验证数独的方法”吧!

Valid Sudoku 验证数独

Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:

  1. Each row must contain the digits 1-9without repetition.

  2. Each column must contain the digits 1-9 without repetition.

  3. Each of the 9 3x3 sub-boxes of the grid must contain the digits 1-9 without repetition.


A partially filled sudoku which is valid.

The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

Example 1:

Input:

[

     ["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"]

]

Output: true

Example 2:

Input:

[

    ["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"]

]

Output: false

Explanation: Same as Example 1, except with the 5 in the top left corner being

modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid.

Note:

  • A Sudoku board (partially filled) could be valid but is not necessarily solvable.

  • Only the filled cells need to be validated according to the mentioned rules.

  • The given board contain only digits 1-9and the character '.'.

  • The given board size is always 9x9.

这道题让验证一个方阵是否为数独矩阵,想必数独游戏我们都玩过,就是给一个 9x9 大小的矩阵,可以分为9个 3x3 大小的矩阵,要求是每个小矩阵内必须都是1到9的数字不能有重复,同时大矩阵的横纵列也不能有重复数字,是一种很经典的益智类游戏,经常在飞机上看见有人拿着纸笔在填数,感觉是消磨时光的利器。这道题给了一个残缺的二维数组,让我们判断当前的这个数独数组是否合法,即要满足上述的条件。判断标准是看各行各列是否有重复数字,以及每个小的 3x3 的小方阵里面是否有重复数字,如果都无重复,则当前矩阵是数独矩阵,但不代表待数独矩阵有解,只是单纯的判断当前未填完的矩阵是否是数独矩阵。那么根据数独矩阵的定义,在遍历每个数字的时候,就看看包含当前位置的行和列以及 3x3 小方阵中是否已经出现该数字,这里需要三个 boolean 型矩阵,大小跟原数组相同,分别记录各行,各列,各小方阵是否出现某个数字,其中行和列标志下标很好对应,就是小方阵的下标需要稍稍转换一下,具体代码如下:

解法一:

class Solution {public:    bool isValidSudoku(vector<vector<char>>& board) {        vector<vector<bool>> rowFlag(9, vector<bool>(9));        vector<vector<bool>> colFlag(9, vector<bool>(9));        vector<vector<bool>> cellFlag(9, vector<bool>(9));        for (int i = 0; i < 9; ++i) {            for (int j = 0; j < 9; ++j) {                if (board[i][j] == '.') continue;                int c = board[i][j] - '1';                if (rowFlag[i][c] || colFlag[c][j] || cellFlag[3 * (i / 3) + j / 3][c]) return false;                rowFlag[i][c] = true;                colFlag[c][j] = true;                cellFlag[3 * (i / 3) + j / 3][c] = true;            }        }        return true;    }};

我们也可以对空间进行些优化,只使用一个 HashSet 来记录已经存在过的状态,将每个状态编码成为一个字符串,能将如此大量信息的状态编码成一个单一的字符串还是需要有些技巧的。对于每个1到9内的数字来说,其在每行每列和每个小区间内都是唯一的,将数字放在一个括号中,每行上的数字就将行号放在括号左边,每列上的数字就将列数放在括号右边,每个小区间内的数字就将在小区间内的行列数分别放在括号的左右两边,这样每个数字的状态都是独一无二的存在,就可以在 HashSet 中愉快地查找是否有重复存在啦,参见代码如下:

解法二:

class Solution {public:    bool isValidSudoku(vector<vector<char>>& board) {        unordered_set<string> st;        for (int i = 0; i < 9; ++i) {            for (int j = 0; j < 9; ++j) {                if (board[i][j] == '.') continue;                string t = "(" + to_string(board[i][j]) + ")";                string row = to_string(i) + t, col = t + to_string(j), cell = to_string(i / 3) + t + to_string(j / 3);                if (st.count(row) || st.count(col) || st.count(cell)) return false;                st.insert(row);                st.insert(col);                st.insert(cell);            }        }        return true;    }};

到此,相信大家对“C++实现验证数独的方法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: C++实现验证数独的方法

本文链接: https://www.lsjlt.com/news/298049.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++实现验证数独的方法
    本篇内容主要讲解“C++实现验证数独的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++实现验证数独的方法”吧!Valid Sudoku 验证数独Determine if a 9...
    99+
    2023-06-20
  • C++实现LeetCode(36.验证数独)
    [LeetCode] 36. Valid Sudoku 验证数独 Determine if a 9x9 Sudoku board is valid. O...
    99+
    2024-04-02
  • C++实现验证括号的方法
    本篇内容介绍了“C++实现验证括号的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Valid Parentheses 验证括号Given...
    99+
    2023-06-20
  • C#实现数独解法
    数独简介 数独(shù dú)是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出...
    99+
    2024-04-02
  • C++实现LeetCode(65.验证数字)
    [LeetCode] 65.Valid Number 验证数字 Validate if a given string can be interpreted as a dec...
    99+
    2024-04-02
  • js如何实现方法参数验证
    这篇文章将为大家详细讲解有关js如何实现方法参数验证,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。方法参数验证ES6 中可以为函数的参数设置默认值,有了这个,我们可以实现一个验证方法参数不能为空的巧妙技巧...
    99+
    2023-06-27
  • C++怎么实现验证数字
    本篇内容介绍了“C++怎么实现验证数字”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Valid Number 验证数字Validate if...
    99+
    2023-06-19
  • php实现数据库验证跳转的方法
    本篇内容主要讲解“php实现数据库验证跳转的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php实现数据库验证跳转的方法”吧!php实现数据库验证跳转的方法:首先创建login.html文件...
    99+
    2023-06-20
  • java实现表单必填参数验证的方法
    一. 概述 在开发后端接口, 通常都会涉及检验参数必填校验, 一般我们的处理都是很粗暴的写个if()判断, 然后抛异常. 本文将介绍通过代理的思想, 用注解优雅的处理非空判断 二....
    99+
    2024-04-02
  • php手机验证码实现的方法
    这篇文章主要介绍“php手机验证码实现的方法”,在日常操作中,相信很多人在php手机验证码实现的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php手机验证码实现的方法”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-07
  • Android实现验证码登录的方法
    这篇文章主要介绍了Android实现验证码登录的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。结果展示1.导包1在项目的gradle中导入maven {&nbs...
    99+
    2023-06-14
  • C# JWT权限验证的实现
    目录什么是JWT,它是一种对API的保护方案,为什么要进行保护呢设计原则第一步:创建token第二步:解析token什么是JWT,它是一种对API的保护方案,为什么要进行保护呢 防泄...
    99+
    2024-04-02
  • C++实现LeetCode(9.验证回文数字)
    [LeetCode] 9. Palindrome Number 验证回文数字 Determine whether an integer is a palindrome. An int...
    99+
    2024-04-02
  • C++验证包围区域的DFS方法实例
    本篇内容主要讲解“C++验证包围区域的DFS方法实例”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++验证包围区域的DFS方法实例”吧!验证包围区域的DFS方法在LeetCode中的Surro...
    99+
    2023-06-20
  • C++怎么实现验证回文数字
    本篇内容介绍了“C++怎么实现验证回文数字”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Palindrome Number 验证回文数字De...
    99+
    2023-06-19
  • C#实现验证码功能
    本文实例为大家分享了C#实现验证码功能的具体代码,供大家参考,具体内容如下 分析 需要四个字符(字母(大小写)+数字) 将四个字符连接成字符串 将连接的字符...
    99+
    2024-04-02
  • Vue实现验证码登录的方法实例
    目录效果展示第一步:创建验证码组件第二步:引入验证码组件并注册使用总结效果展示 第一步:创建验证码组件 这里是组件的代码,可以自行命名文件名,我这里命名为SIdentify.vue...
    99+
    2024-04-02
  • AngularJS实现表单验证功能的方法
    这篇文章主要为大家展示了“AngularJS实现表单验证功能的方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“AngularJS实现表单验证功能的方法”这篇文...
    99+
    2024-04-02
  • Blazor实现数据验证
    Blazor 提供一组输入组件。 输入组件会将绑定字段数据处理到模型,并在提交窗体时验证用户输入。下表显示了可用的输入组件: EditForm EditForm 组件通过 Edit...
    99+
    2024-04-02
  • C#滑动验证码拼图验证功能实现(SlideCaptcha)
    目录使用背景:实现分析:后端代码:准备:使用:前端代码:结语:使用背景: 关于滑动验证码的使用场所还是非常多的,如:调取短信接口之前,和 注册请求之前 或者 频繁会调用的接口都需要加...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作