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相关推荐

  1. [Leetcode][分治法]相关题目汇总/分析/总结

    题目汇总 以下链接均为我博客内对应博文,有解题思路和代码,不定时更新补充. 目前范围:Leetcode前150题 分治法相关题目 两个排序数组的中位数 请找出这两个有序数组的中位数.要求算法的时间复杂 ...

  2. 计算机相关的考试题目,计算机考试相关题目汇总.doc

    计算机基础 考试题型:单选题(0分).填空题(分).题(0分).1.计算机的发展4代,4代计算机的主要元器件分别是 冯·诺依曼体系结构主要的设计思想: 用于科学计算的计算机其特点是 2.转换(二.八. ...

  3. 推荐收藏 | 算法工程师常见面试问题及相关资料汇总

    关注上方"视学算法",选择"星标公众号", 关键时间,第一时间送达! 编辑:数据派THU Github传送门: https://github.com/lcylm ...

  4. 逆向查找_CTFer成长之路--一道数独逆向题目解题过程(算法分析、查找线索)...

    前言 CTF 是实战性很强的赛事.仅学习理论知识,不进行实操,永远无法成为 CTF 大神.本次博客为大家解读一道数独相关的逆向,讲解解题过程,总结知识点(CTF中的套路). 题目介绍 本次选择的是出自 ...

  5. 大数据人工智能物联网论文_物联网学报“大数据”相关论文汇总

    戳上面的蓝字关注我们哦! <物联网学报>"大数据"相关论文汇总  (点击题目即可跳转至指定论文) [1]龚淑蕾, 李堃, 童恩, 等. 基于蜂窝工业物联网的智能工厂解决 ...

  6. 单片机模拟计算机课设,单片机课程设计题目汇总(全)

    单片机原理与接口技术课程设计题目汇总,说明:为便于同学提前探讨开发思路,要求:课程设计考核内容包括:源程序,一.基于单片机的电子时钟设计,设计内容:1.用LCD液晶作为显示设备(30分),2.可以分别 ...

  7. 初中级前端面试题目汇总和答案解析

    笔者虽然曾今也面试过一些前端求职者,但是对于前端的笔试和面试,我觉得并不能体现一个人的真实能力,所以建议大家多修炼前端真正的技术.对于前端面试题,由于之前承诺过会出一期,所以笔者大致总结一下曾今面试的 ...

  8. 中航一院c语言笔试题目,C笔试题目汇总

    C笔试题目汇总 发布时间:2021-03-19 C语言描述问题比汇编语言迅速,工作量小.可读性好,易于调试.修改和移植,而代码质量与汇编语言相当.C语言一般只比汇编程序生成的目标代码效率低10%-20 ...

  9. 信奥中的数学 数论篇 相关资料汇总(2022.07.07)

    数论入门书籍推荐 数论入门书籍推荐_dllglvzhenfeng的博客-CSDN博客_数论入门应该看什么书 数学女孩系列书籍 数学女孩系列书籍_dllglvzhenfeng的博客-CSDN博客 信息学 ...

最新文章

  1. 综述|深度学习在SLAM定位与建图中的应用(近250篇参考文献)
  2. 骑芯供应链(T 面试)
  3. android 区分系统应用,Android区分系统应用和安装应用
  4. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(三)码农网
  5. decimal转为string sql_PHP+Mysql防止SQL注入的方法
  6. 三十、MySQL 处理重复数据
  7. 【调试手段】linux下valgrind内存泄露检查
  8. 自考那些事儿(九):再次学操作系统
  9. 动画编辑器和骨骼动画使用
  10. 推荐:免费万能视音频转换软件--格式工厂
  11. socks v5 协议解析
  12. windows server2019共享选项中网络发现无法启用
  13. PTF 安装及简单测试 Packet Testing Framework
  14. Ps简单的墨笔画制作
  15. [llvm cookbook] 1、LLVM设计与使用
  16. ArcGIS如何获取地理要素的几何属性
  17. oppoa83t怎么升级android8,OPPO A83t原版系统刷机包_OPPO A83t最新升级包更新下载
  18. flash迷宫游戏教程
  19. Android 蓝牙 单独打开和关闭BLE - 详解
  20. gitlab 502 Whoops, GitLab is taking too much time to respond.

热门文章

  1. 词根词缀记忆法 学英文的利器
  2. 谁提出了通用的计算机设备即图灵机的设想,图灵的机器思维思想初探
  3. 教育行业信息安全敲起警钟,迅软DSE致力守护教育数据信息安全
  4. matlab中eig用法,MATLAB中eig的用法
  5. [ZOJ3983]2017CCPC秦皇岛站C - Crusaders Quest(克鲁赛德战记)
  6. 印度理工学院:“印度版麻省理工”的迷思(南方人物周刊)
  7. KMS 激活office2013失败的解决办法 Error:0xC004F038
  8. 分享如何用好外贸即时通讯软件
  9. 同态加密库 HEAAN效率测试(1)
  10. 2021-2027全球及中国MRI脑立体定位仪行业研究及十四五规划分析报告