首页 > 其他分享 >【力扣】36. 有效的数独 - 力扣(LeetCode)

【力扣】36. 有效的数独 - 力扣(LeetCode)

时间:2024-03-27 21:30:22浏览次数:25  
标签:column ++ 36 力扣 小方块 循环 board 数独 row

这里主要是记录一些我做这个题遇到的问题及解决办法

目录

1.问题描述

在这里插入图片描述

1.1 思路分析:

  对于个题目而言,我只使用了一个参数,其中我的主要思路就是暴力循环求解,总体思路就是先判断每行是否符合要求,在判断每列是否符合要求、然后再判断每个小方块是否符合要求;
  对行列进行检查的思路,首先明确,如果对一个数组进行排序,如果使用暴力循环,那么双层循环即可,因此对于这个数独,每一行和每一列都可以单独看成一个数组,然后进行依次判断是否有相同的就行,如果有就返回false,如果真就返回true;这个是比较好判断的;
  对于循环判断的难点就是最后一个如何进行判断,因为这不像一行或者一列的进行判断,如果是一行或者是一列就好判断了,因此我们可以思考把这三行三列的小方块拉直,这样问题就转换成了对一行数组进行判断是否有相同的元素,这样就简单很多了,而具体的实现可以看看代码,尤其是最后对这9个小方块的处理,
  9个小方块如何与循环联系起来,其中可以观察,首先是行数的变换肯定是在最外循环圈,因此每次加三就行,而对于列循环肯定是在内圈,而且行数变换一次,列数就要循环变换三次,因此列数每次加三是在内循环,而最里面的循环就是先进行拉直处理,然后进行判断数组元素是否相等,具体细节可以参考代码,由于使用的是暴力循环,思路比较简单,因此就不梳理整体流程图了

2.程序代码及注释:

代码效率中等,还有改进空间

bool isValidSudoku(char** board, int boardSize, int* boardColSize) {

   int i, j, k, column, row;
   column = 0;
   row = 0;
   char str[9];
   // 检测行符不符合要求
   for (k = 0; k < 9; k++) {
       for (i = 0; i < 9; i++) {
           if (board[k][i] == '.') {
               continue;
           }
           for (j = i + 1; j < 9; j++) {
               if (board[k][i] == board[k][j]) {
                   return false;
               }
           }
       }
   }
   // 检测列符不符合要求
   for (k = 0; k < 9; k++) {
       for (i = 0; i < 9; i++) {
           if (board[i][k] == '.') {
               continue;
           }
           for (j = i + 1; j < 9; j++) {
               if (board[i][k] == board[j][k]) {
                   return false;
               }
           }
       }
   }
   // 对小方块进行检测,一共是9个小方块

   for (row = 0; row < 9; row += 3) {
       for (column = 0; column < 9; column += 3) {
           k = 0;
            // 把小方块拉直
           for (i = 0 + row; i < 3 + row; i++) {
               for (j = 0 + column; j < 3 + column; j++) {
                   str[k] = board[i][j];
                   k++;
               }
           }
           // 对拉直的进行判断是否符合要求
           for (i = 0; i < 9; i++) {
               if (str[i] == '.') {
                   continue;
               }
               for (j = i + 1; j < 9; j++) {
                   if (str[i] == str[j]) {
                       return false;
                   }
               }
           }
           k = 0;
       }
   }
   return true;
}

标签:column,++,36,力扣,小方块,循环,board,数独,row
From: https://blog.csdn.net/w384829981/article/details/137081094

相关文章

  • 基于java+springboot+vue实现的校园二手交易系统(文末源码+Lw+ppt)23-336
    摘 要自从新冠疫情爆发以来,各个线下实体越来越难做,线下购物的人也越来越少,随之带来的是一些不必要的浪费,尤其是即将毕业的大学生,各种用品不方便携带走导致被遗弃,造成大量的浪费。本系统目的就是让毕业生的二手物品有一定的价值,并且在疫情环境下做到零接触买卖,更加安全。在......
  • 基于java+springboot+vue实现的校园二手交易系统(文末源码+Lw+ppt)23-336
     摘 要自从新冠疫情爆发以来,各个线下实体越来越难做,线下购物的人也越来越少,随之带来的是一些不必要的浪费,尤其是即将毕业的大学生,各种用品不方便携带走导致被遗弃,造成大量的浪费。本系统目的就是让毕业生的二手物品有一定的价值,并且在疫情环境下做到零接触买卖,更加安全。......
  • 基于java+springboot+vue实现的校园二手交易系统(文末源码+Lw+ppt)23-336
     摘 要自从新冠疫情爆发以来,各个线下实体越来越难做,线下购物的人也越来越少,随之带来的是一些不必要的浪费,尤其是即将毕业的大学生,各种用品不方便携带走导致被遗弃,造成大量的浪费。本系统目的就是让毕业生的二手物品有一定的价值,并且在疫情环境下做到零接触买卖,更加安全。......
  • 基于java+springboot+vue实现的校园二手交易系统(文末源码+Lw+ppt)23-336
     摘 要自从新冠疫情爆发以来,各个线下实体越来越难做,线下购物的人也越来越少,随之带来的是一些不必要的浪费,尤其是即将毕业的大学生,各种用品不方便携带走导致被遗弃,造成大量的浪费。本系统目的就是让毕业生的二手物品有一定的价值,并且在疫情环境下做到零接触买卖,更加安全。......
  • P1036 [NOIP2002 普及组] 选数
    思路:也算典型的dfs,题目就是要求从n个数中选择k个数,计算这k个数的和,看这个和是否是素数。我们知道在dfs时相当于是进行全排列,而结果要求的是组合后和的情况。根据排列和组合的关系,他们之间差K!倍,所以需要在dfs求得个数cnt后除以k!。题目:AC代码:#include<algorithm>#include<io......
  • Codeforces Round 936 (Div. 2)
    Preface懒狗闪总开完组会不打CF直接滚去睡觉了可海星,感觉我好像退化成我们队训练最少的人了赛后补了下发现这场题竟然都会做,不过F不知道是我实现有问题常数大得一批加了读优才惊险卡过A.MedianofanArray签到,找到中位数后面与它相同的数的个数即可#include<cstdio>#incl......
  • Kruskal最小生成树【详细解释+动图图解】&【sort中的cmp函数】& 【例题:洛谷P3366 【模
    文章目录Kruskal算法简介Kruskal算法前置知识sort中的cmp函数算法思考样例详细示范与解释kruskal模版code↓例题:洛谷P3366【模板】最小生成树code↓完结撒花QWQKruskal算法简介Kr......
  • 每日一题 --- 数组中的第 K 个最大元素[力扣][Go]
    数组中的第K个最大元素题目:数组中的第K个最大元素给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。示例1:输入:[3,2,1,5,6,4]和k=2输出:5示例2:输入:[3,2,3,1,2......
  • 36.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-数据解码器的实现
    免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!如果看不懂、不知道现在做的什么,那就跟着做完看效果内容参考于:易道云信息技术研究院VIP课上一个内容:35.登录成功数据包内容分析码云地址(master分支):https://gitee.com/dye_your_fingers/titan码云版本号:9474c7......
  • CodeForces 1936E Yet Yet Another Permutation Problem
    洛谷传送门CF传送门首先设\(a_i=\max\limits_{j=1}^ip_j\),\(b_i=\max\limits_{j=1}^iq_j\)。直接容斥,钦定有多少值不同的\(a_i\)使得\(a_i=b_i\)。然后再把钦定的每种值转化成每种值第一次使得\(a_i=b_i\)的位置\(i\)。也就是说我们现在要钦定一些位置,......