zoukankan      html  css  js  c++  java
  • Valid Sudoku leetcode

    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.

    判断九宫格的合理性(并不一定有解),只需要依次判断行、列、9个子九宫格是否合理即可!

    我的思维非常常规,代码效率比较慢,如下:

     1 class Solution {
     2 public:
     3     bool isValidSudoku(vector<vector<char>>& board) {
     4         map<char,int> mark;
     5         for(int i=0;i<9;i++)
     6         {
     7             mark.clear();
     8             for(int j=0;j<9;j++)//行是否合理
     9             {
    10                mark[board[i][j]]++;
    11                if(board[i][j]!='.'&&mark[board[i][j]]>1)
    12                     return false;
    13             }
    14             mark.clear();
    15             for(int j=0;j<9;j++)//列是否合理
    16             {
    17                 mark[board[j][i]]++;
    18                 if(board[j][i]!='.'&&mark[board[j][i]]>1)
    19                     return false;
    20             }
    21         }
    22         for(int i=0;i<3;i++)//检查9个子九宫格,控制行.每次3行(或者3列),我选择行或者说从上往下共3排,一次一排
    23         {
    24             mark.clear();
    25             for(int j=3*i;j<3*i+3;j++)//第一列
    26             for(int k=0;k<3;k++)
    27             {
    28                 mark[board[j][k]]++;
    29                 if(board[j][k]!='.'&&mark[board[j][k]]>1)
    30                     return false;
    31             }
    32             mark.clear();
    33             for(int j=3*i;j<3*i+3;j++)//第二列
    34             for(int k=3;k<6;k++)
    35             {
    36                 mark[board[j][k]]++;
    37                 if(board[j][k]!='.'&&mark[board[j][k]]>1)
    38                     return false;
    39             } 
    40             mark.clear();
    41             for(int j=3*i;j<3*i+3;j++)//第三列
    42             for(int k=6;k<9;k++)
    43             {
    44                 mark[board[j][k]]++;
    45                 if(board[j][k]!='.'&&mark[board[j][k]]>1)
    46                     return false;
    47             }  
    48         }
    49         return true;
    50     }
    51 };
    手里拿着一把锤子,看什么都像钉子,编程界的锤子应该就是算法了吧!
  • 相关阅读:
    MySQL之Web乱码问题
    MySQL之表操作
    Python学习笔记调式之抛出异常
    Python学习笔记调试之取得反向跟踪的字符串
    MySQL之库操作
    C#基础 冒泡排序
    C#基础 数组、二维数组
    C#基础 类及常用函数【string 、Math 、DiteTime 、TimeSpan】
    C#基础 异常语句 、跳转语句、while循环、穷举法、迭代法
    C#基础 循环语句【for】
  • 原文地址:https://www.cnblogs.com/chess/p/5080842.html
Copyright © 2011-2022 走看看