zoukankan      html  css  js  c++  java
  • 19.2.3 [LeetCode 36] Valid Sudoku

    Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:

    1. Each row must contain the digits 1-9 without repetition.
    2. Each column must contain the digits 1-9 without repetition.
    3. Each of the 9 3x3 sub-boxes of the grid must contain the digits 1-9 without repetition.


    A partially filled sudoku which is valid.

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

    Example 1:

    Input:
    [
      ["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:
    [
      ["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.
    

    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.
    • The given board contain only digits 1-9 and the character '.'.
    • The given board size is always 9x9.
     1 class Solution {
     2 public:
     3     bool isValidSudoku(vector<vector<char>>& board) {
     4         for (int i = 0; i < 9; i++) {
     5             bool used[10] = { false };
     6             for (int j = 0; j < 9; j++) {
     7                 if (board[i][j] == '.')continue;
     8                 if (used[board[i][j]-'0'])
     9                     return false;
    10                 used[board[i][j]-'0'] = true;
    11             }
    12         }
    13         for (int i = 0; i < 9; i++) {
    14             bool used[10] = { false };
    15             for (int j = 0; j < 9; j++) {
    16                 if (board[j][i] == '.')continue;
    17                 if (used[board[j][i]-'0'])
    18                     return false;
    19                 used[board[j][i]-'0'] = true;
    20             }
    21         }
    22         int limit[9][4] = { 0,2,0,2,
    23                         3,5,0,2,
    24                         6,8,0,2,
    25                         0,2,3,5,
    26                         3,5,3,5,
    27                         6,8,3,5,
    28                         0,2,6,8,
    29                         3,5,6,8,
    30                         6,8,6,8 };
    31         for (int i = 0; i < 9; i++) {
    32             bool used[10] = { false };
    33             for(int j=limit[i][2];j<=limit[i][3];j++)
    34                 for (int k = limit[i][0]; k <= limit[i][1]; k++) {
    35                     if (board[j][k] == '.')continue;
    36                     if (used[board[j][k]-'0'])
    37                         return false;
    38                     used[board[j][k]-'0'] = true;
    39                 }
    40         }
    41         return true;
    42     }
    43 };
    View Code

    朴素解法

  • 相关阅读:
    [团队项目]典型用户
    0415 操作系统_实验二、作业调度模拟程序
    0415 结对2.0评价
    复利计算- 结对2.0--复利计算WEB升级版
    0408汉堡
    复利计算- 结对1.0
    0405《构建之法》第四章读后感
    复利计算器4.0 【java版】
    复利计算器的单元测试结果
    操作系统 实验一、命令解释程序的编写实验
  • 原文地址:https://www.cnblogs.com/yalphait/p/10350298.html
Copyright © 2011-2022 走看看