每日一练_63(2021.8.10) 有效数独。

本文对比了使用哈希表和二维数组实现的两种有效数独验证算法,展示了如何检查行、列和宫格内数字的唯一性,以确保数独的正确性。

看了两种方法:

1.官方:作者:LeetCode
链接:https://leetcode-cn.com/problems/valid-sudoku/solution/you-xiao-de-shu-du-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2.作者:liujin-4
链接:https://leetcode-cn.com/problems/valid-sudoku/solution/36-jiu-an-zhao-cong-zuo-wang-you-cong-shang-wang-x/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

个人微改:

一:

import java.util.HashMap;

public class effectiveSudoku {
    public static void main(String args[]) {
        char a[][] = 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'}};
        boolean b = valid(a);
        System.out.println(b);
    }
    
    static boolean valid(char[][] board) {
        HashMap<Integer,Integer> rows[] = new HashMap[9];
        HashMap<Integer,Integer> columns[] = new HashMap[9];
        HashMap<Integer,Integer> boxes[] = new HashMap[9];
        for(int i=0;i<9;i++) {
            rows[i] = new HashMap<Integer,Integer>();
            columns[i] = new HashMap<Integer,Integer>();
            boxes[i] = new HashMap<Integer,Integer>();
        }
        for(int i=0;i<9;i++) {
            for(int j=0;j<9;j++) {
                char num = board[i][j];
                if(num!='.') {
                    int n = (int)num;
                    int box_index = (i/3)*3+j/3;
                    
                    rows[i].put(n,rows[i].getOrDefault(n,0)+1);
                    columns[j].put(n,columns[j].getOrDefault(n,0)+1);
                    boxes[box_index].put(n,boxes[box_index].getOrDefault(n,0)+1);
                    if(rows[i].get(n)>1||columns[j].get(n)>1||boxes[box_index].get(n)>1) {
                        return false;
                    }
                }
            }
        }
        return true;
    }
}

二:

public class effectiveSudoku_2 {
    public static void main(String args[]) {
        char a[][] = 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'}};
            boolean b = valid(a);
            System.out.println(b);
    }
    
    static boolean valid(char[][] board) {
        int [][]row = new int[9][10];
        int [][]column = new int[9][10];
        int [][]box = new int[9][10];
        for(int i=0;i<9;i++) {
            for(int j=0;j<9;j++) {
                if(board[i][j]=='.') {
                    continue;
                }
                int curNum = board[i][j]-'0';
                if(row[i][curNum]==1) {
                    return false;
                }
                if(column[j][curNum]==1) {
                    return false;
                }
                if (box[j/3 + (i/3) * 3][curNum]==1){
                    return false;
                }
                row[i][curNum]=1;
                column[j][curNum]=1;
                box[j/3 + (i/3) * 3][curNum]=1;
            }
        }
        return true;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是壮壮没错了丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值