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;
}
相关推荐
弈宸33 分钟前
Transformer与ViT
算法·架构
Lonble1 天前
C语言篇:宏
c语言·c
知其然亦知其所以然1 天前
国产大模型也能无缝接入!Spring AI + 智谱 AI 实战指南
java·后端·算法
Lonble1 天前
C语言篇:翻译阶段
c语言·c
然我1 天前
搞定异步任务依赖:Promise.all 与拓扑排序的妙用
前端·javascript·算法
徐小夕1 天前
支持1000+用户同时在线的AI多人协同文档JitWord,深度剖析
前端·vue.js·算法
沐怡旸2 天前
【算法】【链表】328.奇偶链表--通俗讲解
算法·面试
掘金安东尼2 天前
Amazon Lambda + API Gateway 实战,无服务器架构入门
算法·架构
码流之上2 天前
【一看就会一写就废 指间算法】设计电子表格 —— 哈希表、字符串处理
javascript·算法
用户6120414922132 天前
C语言做的文本词频数量统计功能
c语言·后端·敏捷开发