面试经典150题——Day34

文章目录

一、题目

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:

Each row must contain the digits 1-9 without repetition.

Each column must contain the digits 1-9 without repetition.

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

boardi.length == 9

boardij is a digit 1-9 or '.'.

题目来源: leetcode

二、题解

我自己的笨方法

cpp 复制代码
class Solution {
public:
    bool isValidSudoku(vector<vector<char>>& board) {
        unordered_map<char,int> map;
        //遍历行
        for(int i = 0;i < 9;i++){
            //清除上行数据
            map.clear();
            for(int j = 0;j < 9;j++){
                char c = board[i][j];
                if(c != '.'){
                    if(map[c] == 0) map[c]++;
                    else if(map[c] == 1) return false;
                }
            }
        }
        //遍历列
        for(int j = 0;j < 9;j++){
            map.clear();
            for(int i = 0;i < 9;i++){
                char c = board[i][j];
                if(c != '.'){
                    if(map[c] == 0) map[c]++;
                    else if(map[c] == 1) return false;
                }
            }
        }
        //遍历3x3宫格
        for(int i = 0;i < 9;i += 3){
            for(int j = 0;j < 9;j += 3){
                map.clear();
                for(int k = i;k < i + 3;k++){
                    for(int m = j;m < j + 3;m++){
                        char c = board[k][m];
                        if(c != '.'){
                            if(map[c] == 0) map[c]++;
                            else if(map[c] == 1) return false;
                        }
                    }
                }
            }
        }
        return true;
    }
};

答案的好方法

cpp 复制代码
class Solution {
public:
    bool isValidSudoku(vector<vector<char>>& board) {
        int rows[9][9];
        int columns[9][9];
        int subboxes[3][3][9];
        
        memset(rows,0,sizeof(rows));
        memset(columns,0,sizeof(columns));
        memset(subboxes,0,sizeof(subboxes));
        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;
    }
};
相关推荐
CIO_Alliance7 分钟前
AI基础系列(1)| 向量、矩阵、张量在AI中分别扮演什么角色?
大数据·人工智能·线性代数·ai·矩阵·企业cio联盟·企业级ai化转型
泡沫冰@10 分钟前
GO 语言基础
开发语言·算法·golang
键盘会跳舞43 分钟前
C++:std::tuple 源码级深度拆解——变参模板、SFINAE与模板元编程核心技巧
开发语言·c++·sfinae·变参模板
bkspiderx1 小时前
从零开始:VS Code搭建C/C++开发环境全指南(Windows/macOS/Linux)
c语言·c++·windows·vs code·c/c++开发环境
东华万里1 小时前
第40篇C++核心基础与工程实践:从底层逻辑到避坑指南
开发语言·c++·面试·大学生专区
luj_17681 小时前
元设计的诱惑与现实
c语言·开发语言·c++·经验分享·算法
小星星闪亮登场1 小时前
ST表--倍增思想
开发语言·数据结构·c++·算法·思维
东华万里1 小时前
第40篇 C++核心基础与工程实践:从底层逻辑到避坑指南
开发语言·c++·大学生专区
AC赳赳老秦1 小时前
OpenClaw 多源采集公开行业数据:从原始信息到研究报告初稿的自动化实践
java·c语言·c++·python·php·deepseek·openclaw
玩三国杀玩的2 小时前
Pytorch-c++-CUDA
c++·pytorch·python·深度学习