LeetCode:Valid Sudoku

本文介绍了一种遍历检查9x9数独盘面的方法,确保每一行、每一列及每一个3x3的小方格内没有重复数字。通过使用三个二维数组分别记录行、列和每个小方格内的数字出现情况,从而高效地判断数独盘面是否有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:Valid Sudoku

The Sudoku board could be partially filled, where empty cells are filled with the character ‘.’.

A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

题目大意即:给一个9X9的数独图,判断当前在3X3正方形、行、列中有无重复的数字。

思路就是一遍扫描,并想好位置的映射关系。

代码如下:

public class Solution {
    public boolean isValidSudoku(char[][] board) {
        int[][] counts_row = new int[9][9];
        int[][] counts_square = new int[9][9];
        int[][] counts_column = new int[9][9];
        int number;
        for (int row=0; row<9; row++) {
            for (int column=0; column<9; column++) {
                if (board[row][column] == '.') {
                    continue;
                }
                number = board[row][column]-'0'-1;
                int position = (row/3)*3+column/3;

                if (counts_row[row][number] != 0 || counts_square[position][number] != 0
                        || counts_column[column][number] != 0) {
                    return false;
                } 

                // 行
                counts_row[row][number] = 1;
                // 列
                counts_column[column][number] = 1;
                // 矩形
                counts_square[position][number] = 1;
            }
        }
        return true;
    }    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值