当前位置: 首页 > article >正文

LeetCode37 解数独

前言

题目: 37. 解数独
文档: 代码随想录——解数独
编程语言: C++
解题状态: 搞不出来…

思路

困难题的难点之一就是题目比较抽象,这道题本质上也是利用回溯来遍历,不过要根据行列进行二维遍历。

代码

class Solution {
private:
    bool backtracking(vector<vector<char>>& board) {
        for (int i = 0; i < board.size(); i++) {
            for (int j = 0; j < board[0].size(); j++) {
                if (board[i][j] == '.') {
                    for (char k = '1'; k <= '9'; k++) {
                        if (isValid(i, j, k, board)) {
                            board[i][j] = k;
                            if (backtracking(board)) return true;
                            board[i][j] = '.';
                        }
                    }
                    return false;
                }
            }
        }
        return true;
    }

    bool isValid(int row, int col, char val, vector<vector<char>>& board) {
        for (int i = 0; i < 9; i++) {
            if (board[row][i] == val) {
                return false;
            }
        }

        for (int j = 0; j < 9; j++) {
            if (board[j][col] == val) {
                return false;
            }
        }

        int startRow = (row / 3) * 3;
        int startCol = (col / 3) * 3;
        for (int i = startRow; i < startRow + 3; i++) {
            for (int j = startCol; j < startCol + 3; j++) {
                if (board[i][j] == val) {
                    return false;
                }
            }
        }
        return true;
    }
public:
    void solveSudoku(vector<vector<char>>& board) {
        backtracking(board);
    }
};

http://www.kler.cn/news/289962.html

相关文章:

  • 【Steam游戏星露谷物语添加Mod步骤】
  • css中calc
  • 【陪诊系统-H5客户端】订单状态进度条
  • 如果已经提交,重新添加gitignore文件,会忽略么
  • 【QT】学习笔记:枚举桌面窗口句柄
  • 代码随想录算法训练营第35天|背包问题基础、46. 携带研究材料(01背包二维解法)(01背包一维解法)(acm)、416. 分割等和子集
  • 解决Vue npm 淘宝镜像证书过期问题
  • Blazor项目中建立WebApi
  • C++使用MyStack和MyQueue封装栈和队列
  • Chrome 浏览器插件获取网页 window 对象(方案一)
  • pip切换清华源
  • 数据结构二叉树——堆
  • Scott Brinker:Martech中的AI会让买家体验更好还是更糟?这取决于…….
  • Unity版本升级2022 Gradle 升级7.x版本调整
  • 代码随想录 刷题记录-27 图论 (4)拓扑排序
  • Rides实现分布式锁,保障数据一致性,Redisson分布式事务处理
  • python学习之路 - PySpark快速入门
  • docker实战基础三(Docker基础命令)
  • lvgl 自定义组件介绍二
  • yolo训练策略--使用 Python 和 OpenCV 进行图像亮度增强与批量文件复制之(图像增强是按梯度变化优化)
  • 光盘安全隔离与信息单向导入系统-信刻
  • 以人口金字塔图为例,在线绘制左右双侧堆叠条形图
  • 如何设计店铺租赁租凭平台?Java SpringBoot实现全攻略
  • 后端是否开启异步执行,看打印日志的线程信息
  • 多线程篇(可见性 原子性 有序性(原子性))(持续更新迭代)
  • 09J621-2《电动采光排烟天窗》技术详解
  • openharmony历程一:安装ubuntu20.04
  • Vue基础语法
  • ai聊天软件哪个好用?分享5款实用的智能聊天软件
  • Linux云计算学习笔记11 (计划任务)