数独相关题目汇总-Sudoku
Valid Sudoku数独定义:
1.每一行有九个1-9不同数字
2.每一列也有九个1-9不同数字
3.每九个方格也有九个1-9不同数字
1.判断数独是否有效-
描述
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules
The Sudoku board could be partially filled, where empty cells are filled with the character '.'
时间复杂度O(9^2),空间复杂度O(1)
// 1.判断数独是否有效public static boolean isValidSudoku(char[][] matrix) {boolean[] used = new boolean[9];for (int i = 0; i < 9; i++) {Arrays.fill(used, false);for (int j = 0; j < 9; j++) {// 检查行if (!check(matrix[i][j], used)) {return false;}}Arrays.fill(used, false);for (int j = 0; j < 9; ++j) // 检查列if (!check(matrix[j][i], used))return false;}for (int r = 0; r < 3; r++) {for (int c = 0; c < 3; c++) {Arrays.fill(used, false);for (int i = 3 * r; i < 3 * r + 3; i++) {for (int j = 3 * c; j < 3 * c + 3; j++) {if (!check(matrix[i][j], used)) {return false;}}}}}return true;}public static boolean check(char tar, boolean[] used) {if (tar == '.') {return true;}if (used[tar - '1']) {return false;}return used[tar - '1'] = true;}
2.填充单元完成数独-Sudoku Solver
描述
Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character '.' .
You may assume that there will be only one unique solution
// 2.填充单元完成数独,时间复杂度O(9^4),空间复杂度O(1)public static boolean solveSodoku(char[][] matrix) {for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) {if (matrix[i][j] == '.') {for (int k = 1; k <= 9; k++) {matrix[i][j] = Character.forDigit(k, 10);if (isValid(matrix, i, j) && solveSodoku(matrix)) {return true;}matrix[i][j] = '.';}return false;}}}return true;}// 检查 (x, y) 是否合法public static boolean isValid(char[][] matrix, int x, int y) {int i, j;for (i = 0; i < 9; i++) // 检查 y 列if (i != x && matrix[i][y] == matrix[x][y])return false;for (j = 0; j < 9; j++) // 检查 x 行if (j != y && matrix[x][j] == matrix[x][y])return false;for (i = 3 * (x / 3); i < 3 * (x / 3 + 1); i++)for (j = 3 * (y / 3); j < 3 * (y / 3 + 1); j++)if ((i != x || j != y) && matrix[i][j] == matrix[x][y])return false;return true;}
测试程序:
public static void main(String[] args) {char[][] matrix = new char[][] { { '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' } };System.out.println(isValidSudoku(matrix));solveSodoku(matrix);for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix[0].length; j++) {System.out.print(matrix[i][j] + " ");}System.out.println();}}
数独相关题目汇总-Sudoku相关推荐
- [Leetcode][分治法]相关题目汇总/分析/总结
题目汇总 以下链接均为我博客内对应博文,有解题思路和代码,不定时更新补充. 目前范围:Leetcode前150题 分治法相关题目 两个排序数组的中位数 请找出这两个有序数组的中位数.要求算法的时间复杂 ...
- 计算机相关的考试题目,计算机考试相关题目汇总.doc
计算机基础 考试题型:单选题(0分).填空题(分).题(0分).1.计算机的发展4代,4代计算机的主要元器件分别是 冯·诺依曼体系结构主要的设计思想: 用于科学计算的计算机其特点是 2.转换(二.八. ...
- 推荐收藏 | 算法工程师常见面试问题及相关资料汇总
关注上方"视学算法",选择"星标公众号", 关键时间,第一时间送达! 编辑:数据派THU Github传送门: https://github.com/lcylm ...
- 逆向查找_CTFer成长之路--一道数独逆向题目解题过程(算法分析、查找线索)...
前言 CTF 是实战性很强的赛事.仅学习理论知识,不进行实操,永远无法成为 CTF 大神.本次博客为大家解读一道数独相关的逆向,讲解解题过程,总结知识点(CTF中的套路). 题目介绍 本次选择的是出自 ...
- 大数据人工智能物联网论文_物联网学报“大数据”相关论文汇总
戳上面的蓝字关注我们哦! <物联网学报>"大数据"相关论文汇总 (点击题目即可跳转至指定论文) [1]龚淑蕾, 李堃, 童恩, 等. 基于蜂窝工业物联网的智能工厂解决 ...
- 单片机模拟计算机课设,单片机课程设计题目汇总(全)
单片机原理与接口技术课程设计题目汇总,说明:为便于同学提前探讨开发思路,要求:课程设计考核内容包括:源程序,一.基于单片机的电子时钟设计,设计内容:1.用LCD液晶作为显示设备(30分),2.可以分别 ...
- 初中级前端面试题目汇总和答案解析
笔者虽然曾今也面试过一些前端求职者,但是对于前端的笔试和面试,我觉得并不能体现一个人的真实能力,所以建议大家多修炼前端真正的技术.对于前端面试题,由于之前承诺过会出一期,所以笔者大致总结一下曾今面试的 ...
- 中航一院c语言笔试题目,C笔试题目汇总
C笔试题目汇总 发布时间:2021-03-19 C语言描述问题比汇编语言迅速,工作量小.可读性好,易于调试.修改和移植,而代码质量与汇编语言相当.C语言一般只比汇编程序生成的目标代码效率低10%-20 ...
- 信奥中的数学 数论篇 相关资料汇总(2022.07.07)
数论入门书籍推荐 数论入门书籍推荐_dllglvzhenfeng的博客-CSDN博客_数论入门应该看什么书 数学女孩系列书籍 数学女孩系列书籍_dllglvzhenfeng的博客-CSDN博客 信息学 ...
最新文章
- 综述|深度学习在SLAM定位与建图中的应用(近250篇参考文献)
- 骑芯供应链(T 面试)
- android 区分系统应用,Android区分系统应用和安装应用
- 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(三)码农网
- decimal转为string sql_PHP+Mysql防止SQL注入的方法
- 三十、MySQL 处理重复数据
- 【调试手段】linux下valgrind内存泄露检查
- 自考那些事儿(九):再次学操作系统
- 动画编辑器和骨骼动画使用
- 推荐:免费万能视音频转换软件--格式工厂
- socks v5 协议解析
- windows server2019共享选项中网络发现无法启用
- PTF 安装及简单测试 Packet Testing Framework
- Ps简单的墨笔画制作
- [llvm cookbook] 1、LLVM设计与使用
- ArcGIS如何获取地理要素的几何属性
- oppoa83t怎么升级android8,OPPO A83t原版系统刷机包_OPPO A83t最新升级包更新下载
- flash迷宫游戏教程
- Android 蓝牙 单独打开和关闭BLE - 详解
- gitlab 502 Whoops, GitLab is taking too much time to respond.
热门文章
- 词根词缀记忆法 学英文的利器
- 谁提出了通用的计算机设备即图灵机的设想,图灵的机器思维思想初探
- 教育行业信息安全敲起警钟,迅软DSE致力守护教育数据信息安全
- matlab中eig用法,MATLAB中eig的用法
- [ZOJ3983]2017CCPC秦皇岛站C - Crusaders Quest(克鲁赛德战记)
- 印度理工学院:“印度版麻省理工”的迷思(南方人物周刊)
- KMS 激活office2013失败的解决办法 Error:0xC004F038
- 分享如何用好外贸即时通讯软件
- 同态加密库 HEAAN效率测试(1)
- 2021-2027全球及中国MRI脑立体定位仪行业研究及十四五规划分析报告