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

    朴素解法

  • 相关阅读:
    洛谷 1736 创意吃鱼法
    有多重限制的背包
    洛谷 1417 烹调方案
    2008 noip 传纸条
    环形石子合并 洛谷 1880 && hdu 3506 Monkey Party
    洛谷 1282 多米诺骨牌
    (金明的预算方案)依赖性的背包
    分组背包问题
    混合背包问题
    多重背包问题
  • 原文地址:https://www.cnblogs.com/yalphait/p/10350298.html
Copyright © 2011-2022 走看看