leetcode 36 有效的数独
咋办呢,只会暴力算法,9行9列9个9宫格,疯狂遍历完事,贴代码
class Solution { public: bool isValidSudoku(vector<vector<char>>& board) { for(int i = 0 ; i < 9 ; i++) //9行 { unordered_map<char,int> good; for(int j = 0 ; j < 9 ; j++) { if(board[i][j]!='.' ) { if(good.count(board[i][j])==0) good.insert(pair<int,char>(board[i][j],1)); else return false; } } } for(int i = 0 ; i < 9 ; i++) //9列 { unordered_map<char,int> good; for(int j = 0 ; j < 9 ; j++) { if(board[j][i]!='.' ) { if(good.count(board[j][i])==0) good.insert(pair<int,char>(board[j][i],1)); else return false; } } } for(int i = 0 ; i < 3 ; i++) //9个九宫格 { for(int j = 0 ; j < 3 ; j ++) { unordered_map<char,int> good; int m = 3*i; int n = 3*j; for(int p = 0 ; p < 3 ; p++) { for(int q = 0 ; q < 3 ; q++) { if(board[m+p][n+q]!='.' ) { if(good.count(board[m+p][n+q])==0) good.insert(pair<int,char>(board[m+p][n+q],1)); else return false; } } } } } return true; } };
有个方法,就是先创建三个数组,都是9*9,分别为9行,9列,9个9宫格服务。通过一次遍历,每遍历到一个数字,就在对应的行,列,九宫格的数组位上置1,代表这个数所在的行,列,九宫格中已经出现了该数字,下一次再出现该数字,则说明出现重复,判断错误,下面贴代码。
vector<vector<int>> row (9, vector<int>(9,0)); vector<vector<int>> col (9, vector<int>(9,0)); vector<vector<int>> box (9, vector<int>(9,0)); for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ if(board[i][j] == '.'){ continue; } int val = board[i][j] - '1'; int box_index = (i/3) * 3 + j/3; if(row[i][val] == 0 && col[j][val] == 0 && box[box_index][val] == 0){ row[i][val] = 1; col[j][val] = 1; box[box_index][val] = 1; } else{ return false; } } } return true;

浙公网安备 33010602011771号