LeetCode //C - 36. Valid Sudoku

36. Valid Sudoku

Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:

  1. Each row must contain the digits 1-9 without repetition.
  2. Each column must contain the digits 1-9 without repetition.
  3. Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition.

Note:

  • A Sudoku board (partially filled) could be valid but is not necessarily solvable.
  • Only the filled cells need to be validated according to the mentioned rules.

Example 1:

Input: board =

\["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"]]
Output: true

Example 2:

Input: board =

\["8","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"]]
Output: false
Explanation: Same as Example 1, except with the 5 in the top left corner being modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid.

Constraints:

  • board.length == 9
  • board[i].length == 9
  • board[i][j] is a digit 1-9 or '.'.

From: LeetCode

Link: 36. Valid Sudoku


Solution:

Ideas:
  • Iterate through each cell in the board.
  • For each non-empty cell, check if its value violates the Sudoku rules.
  • The Sudoku rules require that each number (1-9) must not repeat in the same row, the same column, or the same 3x3 box.
  • We can use three 9x9 boolean matrices to track the existence of numbers in rows, columns, and boxes. The first matrix, rows, tracks numbers in each row, the second matrix, cols, tracks numbers in each column, and the third matrix, boxes, tracks numbers in each box.
  • If we find a number that has already existed in the current row, column, or box, return false. If we successfully go through the board without finding any duplicates, return true.
Code:
c 复制代码
bool isValidSudoku(char** board, int boardSize, int* boardColSize){
    bool rows[9][9] = {0};
    bool cols[9][9] = {0};
    bool boxes[9][9] = {0};

    for(int i = 0; i < 9; i++){
        for(int j = 0; j < 9; j++){
            if(board[i][j] != '.'){
                int num = board[i][j] - '1'; // subtract '1' to fit in 0-8 index
                int box_index = (i / 3) * 3 + j / 3; // map the box position to the box index
                
                // Check if this value has already been recorded in the current row, column, or box
                if(rows[i][num] || cols[j][num] || boxes[box_index][num]){
                    return false;
                }
                
                // Record the existence of the number in the current row, column, and box
                rows[i][num] = true;
                cols[j][num] = true;
                boxes[box_index][num] = true;
            }
        }
    }

    return true;
}
相关推荐
董董灿是个攻城狮1 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
RuoZoe6 小时前
重塑WPF辉煌?基于DirectX 12的现代.NET UI框架Jalium
c语言
AI软著研究员8 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish8 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱9 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者1 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮1 天前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者1 天前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考1 天前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习