[leetcode]Valid Sudoku

原创 2015年11月18日 17:09:47
class Solution {
public:
    bool isValidSudoku(vector<vector<char> > &board) {
        int row,col,block;
        char ch;
        vector<int> flags(9,0);

        //rows
        for(row=0;row<9;row++){
            flags.assign(9,0);
            for(col=0;col<9;col++){
                ch=board[row][col];
                if(ch!='.'){
                    if(flags[ch-'1']>0){
                        return false;
                    }else{
                        flags[ch-'1']++;
                    }
                }
            }
        }
        //cols
        for(col=0;col<9;col++){
            flags.assign(9,0);
            for(row=0;row<9;row++){
                ch=board[row][col];
                if(ch!='.'){
                    if(flags[ch-'1']>0){
                        return false;
                    }else{
                        flags[ch-'1']++;
                    }
                }
            }
        }
        //blocks
        for(block=0;block<9;block++){
            int srow=(block/3)*3;
            int scol=(block%3)*3;
            flags.assign(9,0);
            for(row=srow;row<srow+3;row++){
                for(col=scol;col<scol+3;col++){
                    ch=board[row][col];
                    if(ch!='.'){
                        if(flags[ch-'1']>0){
                            return false;
                        }else{
                            flags[ch-'1']++;
                        }
                    }
                }
            }
        }
        return true;
    }
};
class Solution {
public:
    bool checkValid(int vec[],int val){
        if(vec[val]==1){
            return false;
        }
        vec[val]=1;
        return true;
    }

    bool isValidSudoku(vector<vector<char>>& board) {
        int rowValid[10]={0};
        int colValid[9][10]={0};
        int subBoardValid[9][10]={0};

        for(int i=0;i<9;++i){
            memset(rowValid,0,sizeof(rowValid));
            for(int j=0;j<9;++j){
                if(board[i][j]!='.'){
                    if(!checkValid(rowValid,board[i][j]-'0')||!checkValid(colValid[j],board[i][j]-'0')||!checkValid(subBoardValid[i/3*3+j/3],board[i][j]-'0')){
                        return false;
                    }
                }
            }
        }
        return true;
    }
};

优化空间

class Solution {
public:
    bool checkValid(int vec[],int val){
        if(val<0){//字符'.'
            return true;
        }
        if(vec[val]==1){
            return false;//already exist
        }
        vec[val]=1;
        return true;
    }

    bool isValidSudoku(vector<vector<char>>& board) {
        int rowValid[10]={0};
        int colValid[10]={0};
        int subBoardValid[10]={0};
        for(int i=0;i<9;++i){
            memset(rowValid,0,sizeof(rowValid));
            memset(colValid,0,sizeof(colValid));
            memset(subBoardValid,0,sizeof(subBoardValid));
            for(int j=0;j<9;++j){
                //if(board[i][j]!='.'){
                    if(!checkValid(rowValid,board[i][j]-'0')||!checkValid(colValid,board[j][i]-'0')||!checkValid(subBoardValid,board[3*(i/3)+j/3][3*(i%3)+j%3]-'0')){
                        return false;
                    }
                //}
            }
        }
        return true;
    }
};

LeetCode 36 Valid Sudoku (C,C++,Java,Python)

Problem: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku boa...
  • runningtortoises
  • runningtortoises
  • 2015年05月18日 22:56
  • 2974

Valid Sudoku -- LeetCode

原题链接: http://oj.leetcode.com/problems/valid-sudoku/  这道题是Sudoku Solver的一个子问题,在解数独的时候我们需要验证当前数盘是否合法。...
  • linhuanmars
  • linhuanmars
  • 2014年03月10日 03:52
  • 13182

LeetCode-36. Valid Sudoku (JAVA)(有效数独)

LeetCode-36. Valid Sudoku (JAVA)(有效数独)
  • mine_song
  • mine_song
  • 2017年04月17日 09:25
  • 447

Valid Sudoku Leetcode Python

Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could ...
  • hyperbolechi
  • hyperbolechi
  • 2015年01月17日 05:21
  • 1066

LeetCode(36)Valid Sudoku

题目Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.The Sudoku board could be...
  • fly_yr
  • fly_yr
  • 2015年08月25日 20:40
  • 2246

Leetcode_36_Valid Sudoku

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42497857 Determine if a Su...
  • pistolove
  • pistolove
  • 2015年01月08日 19:15
  • 1440

LeetCode 36 Valid Sudoku(有效数独)

翻译数独板被部分填充,空格部分用'.'来填充。一个部分填充的数组是否有效只需要看其填充的部分即可。原文代码这道题写了一会,错了……因为输入太懒搞了,就直接看了别人写的……class Solution ...
  • NoMasp
  • NoMasp
  • 2015年11月30日 20:58
  • 3391

[LeetCode]36.Valid Sudoku

【题目】 Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board c...
  • SunnyYoona
  • SunnyYoona
  • 2014年01月20日 13:42
  • 1491

LeetCode 36. Valid Sudoku(数独游戏)

原题网址:https://leetcode.com/problems/valid-sudoku/ Determine if a Sudoku is valid, according to: Sud...
  • jmspan
  • jmspan
  • 2016年05月20日 10:38
  • 364

36. Valid Sudoku [easy] (Python)

题目链接https://leetcode.com/problems/valid-sudoku/题目原文 Determine if a Sudoku is valid, according to: ...
  • coder_orz
  • coder_orz
  • 2016年06月06日 16:35
  • 1425
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[leetcode]Valid Sudoku
举报原因:
原因补充:

(最多只允许输入30个字)