zoukankan      html  css  js  c++  java
  • LeetCode 36 Valid Sudoku(合法的数独)

     
    给出一个二维数组,数组大小为数独的大小,即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;
        }
    }
  • 相关阅读:
    java方式实现堆排序
    java方式实现归并排序
    用java方式实现快速排序
    Linux中crontab定时任务
    TCP/IP网络协议初识
    github设置添加ssh
    IDM下载工具使用
    Java程序在内存中运行详解
    GitHub的高级搜索方式
    深入理解JavaScript中的堆与栈 、浅拷贝与深拷贝
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/6534899.html
Copyright © 2011-2022 走看看