zoukankan      html  css  js  c++  java
  • leetcode先刷_Valid Sudoku

    我没有看到这个问题,这使其在现货需求数独,害怕一直没敢做。后来我发现原来的标题就是这么简单。推断现在只有数字全不符合的就可以了棋盘上的形势的要求。

    是不是正确的三个周期。。人是不能满意地看到每一行。每列装不满意,每个小3*3的格男人不能满足孩子。每个小3*3格子我是用求得左上角的方法来验证的。

    事实上认为数独难另一个原因是记得他在编程之美上出现过。。

    那上面讨论的主要是如何构造一个数独。详细记不太清楚了,印象最深的是,要想保证有解,最好的办法是先用置换法生成一个解,然后去掉这个解中的一些位置。

    class Solution {
    public:
        bool isValidSudoku(vector<vector<char> > &board) {
            bool vis[10];
            for(int start=0;start<9;start++){
                int i = start/3, j = start%3;
                memset(vis, 0, sizeof(vis));
                for(int k=0;k<9;k++){
                    int ii=i*3+k/3, jj=j*3+k%3;
                    if(board[ii][jj] == '.')
                        continue;
                    if(vis[board[ii][jj]-'0'])
                        return false;
                    else
                        vis[board[ii][jj]-'0'] = 1;
                }
            }
            for(int i=0;i<9;i++){
                memset(vis, 0, sizeof(vis));
                for(int j=0;j<9;j++){
                    if(board[i][j]=='.')
                        continue;
                    if(vis[board[i][j]-'0'])
                        return false;
                    vis[board[i][j]-'0'] = 1;
                }
            }
            for(int i=0;i<9;i++){
                memset(vis, 0, sizeof(vis));
                for(int j=0;j<9;j++){
                    if(board[j][i]=='.')
                        continue;
                    if(vis[board[j][i]-'0'])
                        return false;
                    vis[board[j][i]-'0'] = 1;
                }
            }
            return true;
        }
    };


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    Linux基础命令—clear
    Linux基础命令—mv
    Linux基础命令—rm
    Linux基础命令—cp
    Linux基础命令—touch
    Linux基础命令—tree
    C#获取设备话筒主峰值(实时音频输出分贝量)
    C# 获取基类或者接口的所有继承类方法
    RegisterAttached 两种绑定方式
    RijndaelManaged 加密
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4889263.html
Copyright © 2011-2022 走看看