zoukankan      html  css  js  c++  java
  • leetcode 36

    36. 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.

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

    判断数独是否有效,即每一行数不能重复,每一列数不能重复,每个9宫格数不能重复。

    思路比较简单,但在实现的过程中遇到一些麻烦。刚开始用最简单的比较法来判断数是否重复,结果运行时间超时。

    后采用map容器,大大减少了判断重复的时间。

    代码如下:

     1 class Solution {
     2 public:
     3     bool isValidSudoku(vector<vector<char>>& board) {
     4         int i,j,k,l,map[10];
     5         if(board.size()!=9 || board[0].size()!=9)
     6         {
     7             return false;
     8         }
     9         for(i=0;i<9;i++){
    10             memset(map,0,sizeof(map));
    11             for(j=0;j<9;j++){
    12                 if(board[i][j]=='.')
    13                 {
    14                    continue; 
    15                 }
    16                 if(board[i][j]<'0' || board[i][j]>'9')
    17                 {
    18                     return false;
    19                 }
    20                 int num=board[i][j]-'0';
    21                 if(map[num])
    22                 {
    23                     return false;
    24                 }
    25                 map[num]=1;
    26             }
    27         }
    28         for(j=0;j<9;j++){
    29             memset(map,0,sizeof(map));
    30             for(i=0;i<9;i++){
    31                 if(board[i][j]=='.')
    32                 {
    33                     continue;
    34                 }
    35                 int num=board[i][j]-'0';
    36                 if(map[num])
    37                 {
    38                     return false;
    39                 }
    40                 map[num]=1;
    41             }
    42         }
    43         for(i=0;i<9;i+=3){
    44             for(j=0;j<9;j+=3){
    45                 memset(map,0,sizeof(map));
    46                 for(k=i;k<i+3;k++){
    47                     for(l=j;l<j+3;l++){
    48                         if(board[k][l]=='.')
    49                         {
    50                             continue;
    51                         }
    52                         int num=board[k][l]-'0';
    53                         if(map[num])
    54                         {
    55                             return false;
    56                         }
    57                         map[num]=1;
    58                     }
    59                 }
    60             }
    61         }
    62         return true;
    63     }
    64 };
  • 相关阅读:
    C#控件刷新
    [转载] 尺度不变特征变换匹配算法
    C++ windows 多线程 互斥锁
    堆栈内存申请,以及32位程序内存上限
    dumpbin检查Dll
    CV_Assert
    Linux复习
    操作系统复习
    P/NP问题
    程序
  • 原文地址:https://www.cnblogs.com/shellfishsplace/p/5855387.html
Copyright © 2011-2022 走看看