[leetcode]Valid Sudoku

来源:互联网 发布:联通宽带网络怎么样 编辑:程序博客网 时间:2024/06/05 10:52
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;    }};
0 0
原创粉丝点击