zoukankan      html  css  js  c++  java
  • 036有效的数独

     1 #include "000库函数.h"
     2 
     3 //一看,没想出什么好法子,就遍历了
     4 //最重要的是如何比较小九宫格的数据
     5 //44ms
     6 class Solution {
     7 public:
     8     bool isValidSudoku(vector<vector<char>>& board) {
     9         for (int i = 0; i < 9; ++i)
    10             for (int j = 0; j < 9; ++j) {
    11                 if (board[i][j] == '.')continue;
    12                 for (int k = 8; k > j; --k)
    13                     if (board[i][j] == board[i][k])return false;//比较行        
    14                 for (int k = 8; k > i; --k)
    15                     if (board[i][j] == board[k][j])return false;//比较列
    16                 for (int k = i + 1; k % 3 != 0; k++) //比较九宫格
    17                     for (int h = j / 3 * 3; h < j / 3 * 3 + 3; h++)
    18                         if (board[i][j] == board[k][h])
    19                             return false;
    20             }
    21         return true;
    22     }
    23 };
    24 
    25 
    26 //博客答案
    27 //使用容器,大大减少了循环次数,但大大增加了内存空间 
    28 //36ms
    29 class Solution {
    30 public:
    31     bool isValidSudoku(vector<vector<char> > &board) {
    32         vector<vector<bool> > rowFlag(9, vector<bool>(9, false));//9*9用来标记行的
    33         vector<vector<bool> > colFlag(9, vector<bool>(9, false));//9*9用来标记列的
    34         vector<vector<bool> > cellFlag(9, vector<bool>(9, false));//9*9用来标记九宫格【共有9个】
    35         for (int i = 0; i < 9; ++i) {
    36             for (int j = 0; j < 9; ++j) {
    37                 if (board[i][j] == '.') continue;
    38                 int c = board[i][j] - '1';
    39                 if (rowFlag[i][c] || colFlag[c][j] || cellFlag[3 * (i / 3) + j / 3][c]) return false;
    40                 //如果行或列或九宫已经被标记过,则出行重复
    41                 rowFlag[i][c] = true;//进行标记
    42                 colFlag[c][j] = true;
    43                 cellFlag[3 * (i / 3) + j / 3][c] = true;//最好的就是这样判断哪个九宫格的位置,一直是困扰博主的一个地方
    44                 
    45             }
    46         }
    47         return true;
    48     }
    49 };
    50 
    51 void T036() {
    52 
    53     vector<vector<char>> board;
    54     board = { {'.','.','5'},{'3','.','.'},{'.','.','3'} };
    55     Solution s;
    56     cout << s.isValidSudoku(board) << endl;
    57 
    58         
    59 
    60                 
    61     
    62 
    63 }
  • 相关阅读:
    云原生 Serverless Database 使用体验
    如何画一张架构图(内含知识图谱)
    阿里云 Serverless Kubernetes 的落地实践分享
    【阿里云 CDP 公开课】 第二讲:CDH/HDP 何去何从
    阿里云数据治理系列(一):治理项目启动前的必答三问
    使用递归方法全选/反选TreeView中CheckBox子节点
    C# 安装部署项目 【转】
    HashTable存储树形数据
    Delphi中MessageBox用法【转】
    js nextSibling属性和previousSibling属性
  • 原文地址:https://www.cnblogs.com/zzw1024/p/10555813.html
Copyright © 2011-2022 走看看