• LeetCode36 Valid Sudoku


    题目:

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.

    The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

    A partially filled sudoku which is valid. (Easy)

    Note:
    A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

    分析:

    就是把行、列和每个九宫格分别判定即可。思路很简单,就是代码需要简化,自己的版本写起来比较复杂,但是感觉好读一些。

    代码1:

     1 class Solution {
     2 public:
     3     bool isValidSudoku(vector<vector<char>>& board) {
     4         int flag[10] = {0};
     5         for (int i = 0; i < 9; ++i) {
     6             memset(flag,0,sizeof(flag));
     7             for (int j = 0; j < 9; ++j) {
     8                 if (board[i][j] != '.') {
     9                     if (flag[board[i][j] - '0'] == 1) {
    10                         return false;
    11                     }
    12                     else  {
    13                         flag[board[i][j] - '0'] = 1;
    14                     }
    15                 }
    16             }
    17         }
    18         for (int i = 0; i < 9; ++i) {
    19             memset(flag,0,sizeof(flag));
    20             for (int j = 0; j < 9; ++j) {
    21                 if (board[j][i] != '.') {
    22                     if (flag[board[j][i] - '0'] == 1) {
    23                         return false;
    24                     }
    25                     else  {
    26                         flag[board[j][i] - '0'] = 1;
    27                     }
    28                 }
    29             }
    30         }
    31         for (int i = 0; i < 3; ++i) {
    32             for (int j = 0; j < 3; ++j) {
    33                 memset(flag,0,sizeof(flag));
    34                 for (int m = 3 * i; m < 3 * i + 3; ++m) {
    35                     for (int n = 3 * j; n < 3 * j + 3; ++n) {
    36                         if (board[m][n] != '.') {
    37                             if (flag[board[m][n] - '0'] == 1) {
    38                                 return false;
    39                             }
    40                             else  {
    41                                 flag[board[m][n] - '0'] = 1;
    42                             }
    43                         }
    44                     }
    45                 }
    46             }
    47         }
    48         return true;
    49     }
    50 };

    代码2:

     1 class Solution {
     2 public:
     3     bool isValidSudoku(vector<vector<char>>& board) {
     4         for (int i = 0; i < 9; ++i) {
     5             int flag1[10] = {0};
     6             int flag2[10] = {0};
     7             int flag3[10] = {0};
     8             int m = (i / 3) * 3 , n = (i % 3) * 3;
     9             for (int j = 0; j < 9; ++j) {
    10                 if (board[i][j] != '.') {
    11                     if (flag1[board[i][j] - '0'] == 1) {
    12                         return false;
    13                     }
    14                     else  {
    15                         flag1[board[i][j] - '0'] = 1;
    16                     }
    17                 }
    18                 if (board[j][i] != '.') {
    19                     if (flag2[board[j][i] - '0'] == 1) {
    20                         return false;
    21                     }
    22                     else  {
    23                         flag2[board[j][i] - '0'] = 1;
    24                     }
    25                 }
    26                 int x = m + (j / 3);
    27                 int y = n + (j % 3);
    28                 if (board[x][y] != '.') {
    29                     if (flag3[board[x][y] - '0'] == 1) {
    30                         return false;
    31                     }
    32                     else  {
    33                         flag3[board[x][y] - '0'] = 1;
    34                     }
    35                 }
    36             }
    37         }
    38         return true;
    39     }
    40 };
     
  • 相关阅读:
    0008_Python变量
    shiro Filter过滤器管理197
    oracle 将一个数据库(A)的表导入到另一个数据库197
    top命令使用197
    SpringBoot下载Excel文件,解决文件损坏问题197
    java元注解197
    Content-Type
    centos7 下修改网络配置
    mint 20 install NVIDIA driver for 3080 via run
    使用numpy rot90操作image后,opencv cv2.rectangle 报错
  • 原文地址:https://www.cnblogs.com/wangxiaobao/p/5804675.html
Copyright © 2020-2023  润新知