博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 36 Valid Sudoku(合法的数独)
阅读量:4687 次
发布时间:2019-06-09

本文共 1420 字,大约阅读时间需要 4 分钟。

题目链接: 
 
给出一个二维数组,数组大小为数独的大小,即9*9 
其中,未填入数字的数组值为’.’
判断当前所给已知数组中所填的数字是否合法。
 
 
数独合法性判断:

   1. 满足每一行的数字都只能是1~9,并且不能产生重复

   2. 满足每一列的数字都只能是1~9,并且不能产生重复

   3. 满足每一个3*3的正方形块中的数字只能是1~9,并且不能产生重复

 
 
判断过程:
初始化三个数组:row, column, cube 均为0
两层嵌套的循环,当遇到board数组中的不是’.’时,将board中的char转换为相对应的整数并且减去1
然后对每一行,每一列以及每一个3*3的正方形进行合法性判断. 
 
 
参考代码:
 
package leetcode_50;import java.util.Arrays;/*** *  * @author pengfei_zheng * 判断数组是否合法 */public class Solution36 {    public static boolean isValidSudoku(char[][] board) {        int [][]row = new int[9][9];        int [][]column = new int[9][9];        int [][]cube = new int[9][9];        for(int i = 0 ; i < 9 ; i ++){            Arrays.fill(row[i],0);            Arrays.fill(column[i], 0);            Arrays.fill(cube[i], 0);        }        for(int i = 0 ; i < 9 ; i++){            for(int j = 0; j < 9 ; j++){                if(board[i][j]!='.'){                    //tips: char转为对应的数字需要减去48 此处得到对一个数字并且减去1                    int num = board[i][j]-49;                    int k = i / 3 * 3 + j / 3;                    //这里的num表示当前的在该行下是否已经填入过,如果该num已经使用过则返回                    if(row[i][num]!=0 || column[j][num]!=0 || cube[k][num]!=0)                        return false;                    else                        row[i][num] = column[j][num] = cube[k][num] = 1;                }            }        }        //只有当全部的判断均正常进行时,才能返回true        return true;    }}

 

转载于:https://www.cnblogs.com/zpfbuaa/p/6534899.html

你可能感兴趣的文章
11.5 内部类
查看>>
Cosine Similarity
查看>>
halt和shutdown 的区别
查看>>
git常用操作
查看>>
京东SSO单点登陆实现分析
查看>>
u-boot启动第一阶段
查看>>
MySQL批量SQL插入性能优化
查看>>
定义列属性:null,default,PK,auto_increment
查看>>
用户画像展示
查看>>
C#中StreamReader读取中文出现乱码
查看>>
使用BufferedReader的时候出现的问题
查看>>
linux安装图形界面
查看>>
Android广播发送失败
查看>>
博弈论之入门小结
查看>>
解决IE8下opacity属性失效问题,无法隐藏元素
查看>>
C#匿名函数的坑
查看>>
标记页面控件尺寸
查看>>
批处理文件中的路径问题
查看>>
appium+python 环境搭建
查看>>
WampServer下修改和重置MySQL密码
查看>>