LeetCode:Sudoku Solver Valid Sudouku

其实数独还是我挺喜欢的一个游戏。原来有本数独的书。

其实Sudoku是基于Valid Sudouku.其实一开始有点想太多。基于平常玩数独的经验,有很多解数独的规则。貌似这个人为判断因素比较多。

而且一开始理解的valid是有解无解,其实这里要求的是给定的board里的数字是否符合规则,不一定能解。

其实我这里有3个函数,一个是判断行除该位置外是否有相同值的,一个是列,最后一个是小正方形里。

而求解使用的是暴力,一个个尝试。


public class SudokuSolver {
   
    public void solveSudoku(char[][] board)
    {
        if(board == null) return;
        suduku(board);
    }
   
    public boolean suduku(char[][] board)
    {
        for(int i = 0;i<9;i++)
        {
            for(int j = 0;j<9;j++)
            {
                if(board[i][j] == '.')
                {
                    for(int k = 1;k<=9;k++)
                    {
                        board[i][j] =  (char)('0' + k);
                        if(isValid(board,i,j)&&suduku(board))
                        {
                            return true;
                        }
                        board[i][j] = '.';
                    }
                    return false;
                }
            }
        }
        return true;
    }
   
    public boolean isValid(char[][] board,int row,int column)
    {
        if(board == null)return false;
        boolean valid = true;
        if(rowContainsValue(board,row,column,board[row][column]))
        {
            valid = false;
            return valid;
        }
        if(columnContainsValue(board,row,column,board[row][column]))
        {
            valid = false;
            return valid;
        }
        if(squareContainsValue(board,row,column,board[row][column]))
        {
            valid = false;
            return valid;
        }
        return valid;
    }
   
    public boolean isValidSudoku(char[][] board) {
       
        if(board == null) return false;
        boolean valid = true;
        boolean flag = true;
        for(int i = 0;i<9&&flag;i++)
        {
            for(int j = 0;j<9;j++)
            {
                if(board[i][j] == '.')
                    continue;
                if(rowContainsValue(board,i,j,board[i][j]))
                {
                    valid = false;
                    flag = false;
                    break;
                }
                if(columnContainsValue(board,i,j,board[i][j]))
                {
                    valid = false;
                    flag = false;
                    break;
                }
                if(squareContainsValue(board,i,j,board[i][j]))
                {
                    valid = false;
                    flag = false;
                    break;
                }
            }
        }
       
        return valid;
       
    }
   
    public boolean rowContainsValue(char[][] board,int row,int column,char value)
    {
        boolean val =false;
        for(int i = 0;i<9;i++)
        {
            if(board[row][i] == value&&i!=column)
            {
                val = true;
                break;
            }
        }
        return val;
    }
    public boolean columnContainsValue(char[][] board,int row,int column,char value)
    {
        boolean val =false;
        for(int i = 0;i<9;i++)
        {
            if(board[i][column] == value&&i!=row)
            {
                val = true;
                break;
            }
        }
        return val;
    }
    public boolean squareContainsValue(char[][] board,int row,int column,char value)
    {
        boolean val =false;
        boolean flag = false;
        for(int i = (row/3)*3;i<(row/3)*3+3&&!flag;i++)
        {
            for(int j=(column/3)*3;j<(column/3)*3+3;j++)
            {
                if(board[i][j] == value&&i!=row&&j!=column)
                {
                    val = true;
                    flag = true;
                    break;
                }
            }
        }
        return val;
    }

}

转载于:https://www.cnblogs.com/jessiading/p/3784093.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu之SVN客户端安装+使用

下载SVN 我们先使用sudo apt-get source sudo apt-get update 然后下载svn sudo apt-get install subversion 一步继续一步,每次y 安装成功之后 svn --version查看。 使用 2、 新建一个目录,cd 到新建目录下,将文件 checkout 到本地目录:svn checkout svn://192.168.1…

《SAS编程与数据挖掘商业案例》学习笔记之十一

继续读书笔记&#xff0c;本文重点侧重sas观测值的操作方面&#xff0c; 主要包括&#xff1a;输出观测值、更新观测值、删除观测值、停止输出观测值等 1.output语句 输出当前在pdv中的观测值&#xff0c;继续无条件执行下面的语句。 注意&#xff1a;简单的data步不需要outp…

【1】淘宝sdk装修入门引言

淘宝sdk开发者要具备的一些要求&#xff1a;【1】photoshop图像处理能力【2】html常用标签的基础知识【3】htmlcss布局的基础知识【4】简单的php输出语句【5】对淘宝装修的一些基本了解淘宝sdk的开发流程&#xff1a;【1】设计平面效果图【2】创建本地模板文件【3】创建自定义设…

基于嵌入式webserver的服务器状态监控

其实也是在easyhadoop做第二次重构的时候用到了这个嵌入式的webserver去做服务器状态的监控&#xff0c;可以单独摘出来写个东西。思路主要是用python脚本获取linux服务器的各种状态信息&#xff0c;然后用webserver的方式&#xff0c;以json数据发给http&#xff0c;主控节点去…

Yii框架里用grid.CGridView调用pager扩展不显示最后一页按钮的解决

有如下一例,调用zii.widgets.grid.CGridView显示Blog信息&#xff0c;代码如下&#xff1a; 1 $this->widget(zii.widgets.grid.CGridView, 2 array(3 id>blog-grid,4 dataProvider>$model->search(),5 filter>$model,6 pa…

.NET 6新特性试用 | PeriodicTimer

前言在.NET中&#xff0c;已经存在了5个Timer类&#xff1a;System.Threading.TimerSystem.Timers.TimerSystem.Web.UI.TimerSystem.Windows.Forms.TimerSystem.Windows.Threading.DispatcherTimer不管以前这样设计的原因&#xff0c;现在.NET 6又为我们增加了一个新Timer&…

shell--指“提供使用者使用界面”的软件(命令解析器)

在计算机科学中&#xff0c;Shell俗称壳&#xff08;用来区别于核&#xff09;&#xff0c; 是指“提供使用者使用界面”的软件&#xff08;命令解析器&#xff09;。 它类似于DOS下的command.com。它接收用户命令&#xff0c;然后调用相应的应用程序。同时它又是一种程序设计语…

《SAS编程与数据挖掘商业案例》学习笔记之十三

本次重点&#xff1a;data步循环与控制 涉及&#xff1a;if/then/else语句&#xff0c;select语句&#xff0c;do语句&#xff0c;continue语句&#xff0c;leave语句 1.if then else 语句 高效率的if应用&#xff1a; 1&#xff09; If x1 then y1; Else if x2 then y2; Els…

ChatForFun 公众号使用说明

使用方法 2016-07-16 DennisMi ChatForFun1&#xff0c;发送 #1 实现登陆&#xff0c;或者退出登陆 2&#xff0c;发送 #2 实现加入聊天&#xff0c;和退出聊天 3&#xff0c;聊天开始后&#xff0c;可以直接发送消息 4&#xff0c;如果需要退出登陆或者退出聊天&#xff0c;…

sessionfunctionphp实战第六天

最近研究sessionfunction&#xff0c;稍微总结一下&#xff0c;以后继续补充&#xff1a; 今天学习了做后台页面&#xff0c;很失败就不展示了。 php方面&#xff1a;以下代码可以屏蔽php注意级别的错误&#xff0c;即 抛出任何非注意错误 error_reporting(E_ALL&~E_NOTICE…

利用WebBrowser实现Web打印的分析

利用WebBrowser实现Web打印的分析 原文:利用WebBrowser实现Web打印的分析WebBrowser是IE内置的浏览器控件&#xff0c;无需用户下载。本文档所讨论的是有关IE6.0版本的WebBrowser控件技术内容。其他版本的IE应该也支持。与其相关的技术要求有&#xff1a;打印文档的生成、页面设…

强大的grep命令

强大的grep命令网上关于grep命令的解释一搜一大堆&#xff0c;基本都是把man命令大致翻译了一下&#xff0c;说实话&#xff0c;看完就忘&#xff01;个人认为&#xff0c;学习命令最好的方式就是模拟真实环境&#xff0c;写出一些可能用到的命令组合&#xff0c;然后慢慢消化&…

.NET 6新特性试用 | 总结:我最喜欢的5个特性

前言不知不觉&#xff0c;《.NET 6新特性试用》系列文章已经写了20多篇&#xff0c;而今天终于要告一段落了。如果你还没有看过&#xff0c;详细文章列表在这里&#xff1a;.NET 6新特性试用系列在这么多特性中&#xff0c;我最喜欢如下5个特性&#xff1a;1、最小Web API仅需三…

《SAS编程与数据挖掘商业案例》学习笔记之十二

本次重点在&#xff1a;sas数据集管理 主要包括&#xff1a;包括数据集纵向拼接、转置、排序、比较、复制、重命名、删除等 1.append语句 注&#xff1a;base数据集和data两个数据集必须结构一样&#xff0c;避免使用force的情况&#xff0c;重复append的会造成重复。 一个避…

mikrotikROS系统的几种安装方法

这里简单介绍下几种ROS的安装方法,以及适用于哪些设备,这里我们先提供一个ROS6.0全系列版本的下载链接mikrotik-RouteOS-V6.0正式版下载 或者前往官方下载最新版常见的ROS硬件一般分为:X86架构(也是最常用的)mipsbe(欧米tik,部分RB系列,SXT,Groove等)mipsle(RBC系列,RB100,R…

分布式云+dubbo+zookeeper+Springmvc整合

2019独角兽企业重金招聘Python工程师标准>>> Dubbo采用全Spring配置方式&#xff0c;透明化接入应用&#xff0c;对应用没有任何API侵入&#xff0c;只需用Spring加载Dubbo的配置即可&#xff0c;Dubbo基于Spring的Schema扩展进行加载。 一&#xff1a;单机模式安装…

.Net下你不得不看的分表分库解决方案-多字段分片

介绍本期主角:ShardingCore 一款ef-core下高性能、轻量级针对分表分库读写分离的解决方案&#xff0c;具有零依赖、零学习成本、零业务代码入侵dotnet下唯一一款全自动分表,多字段分表框架,拥有高性能,零依赖、零学习成本、零业务代码入侵,并且支持读写分离动态分表分库,同一种…