LeetCode刷题---有效的数独

本文介绍了如何通过哈希表(数组)计数的方式,统计数独矩阵中每个数字在行、列和九宫格中的出现次数,以判断矩阵是否构成有效的数独。关键数据结构包括行计数rows、列计数columns和九宫格计数subboxes。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
解题思路:

该题通过哈希表(数组)计数来解决,因为矩阵是一个9*9的固定矩阵
定义二维数组rows,columns和三维度数组subboxes来对矩阵中第i行第j列数字在行、列和九宫格中出现的次数计数。
如果是一个有效的数独,那么矩阵中某个格子中的数字出现的次数在以上数组中对应的位置应该为1,如果超过1,则证明这个矩阵不是一个有效的数独。
行:rows[i][index]中i表示这是第几行,index即矩阵中第i行第j列单元格中数字-1(因为1<=数<=9,而索引0<=index<=8),index也是这个数在rows数组中第i行的索引,即rows[i][index]它表示矩阵中第i行第j列数字在第i行出现的次数。
列:columns[j][index]中j表示这是第几列,index即矩阵中第i行第j列单元格中数字-1,index也是这个数在columns数组中第j列的索引,即columns[j][index]它表示矩阵中第i行第j列数字在第j列出现的次数。
九宫格:subboxes[i / 3][j / 3][index]通过i/3和j/3来确定矩阵中某个九宫格的位置,index表示矩阵中第i行第j列的数-1,index也是这个数在subboxes数组中第n个九宫格中的索引,即subboxes[i / 3][j / 3][index]表示这个数在矩阵中第个九宫格出现的次数。
举例:如果矩阵中第1行第1列的数字为5,它的次数在rows数组中的位置为rows[1][4],即rows数组的第1行第4列。

代码实现:

		//行计数
		int[][] rows = new int[9][9];
		//列计数
        int[][] columns = new int[9][9];
        //九宫格计数
        int[][][] subboxes = new int[3][3][9];
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                char c = board[i][j];
                if (c != '.') {
                    int index = c - '0' - 1;
                    //计数
                    rows[i][index]++;
                    columns[j][index]++;
                    subboxes[i / 3][j / 3][index]++;
                    //判断是不是有效的数独
                    if (rows[i][index] > 1 || columns[j][index] > 1 || subboxes[i / 3][j / 3][index] > 1) {
                        return false;
                    }
                }
            }
        }
        return true;
    }
  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值