当前位置: 代码迷 >> 综合 >> Leetcode 036有效的数独(初始化bool数组的两种方法) C++:memset(st,0,sizeof st),JAVA:Arrays.fill(st,false);
  详细解决方案

Leetcode 036有效的数独(初始化bool数组的两种方法) C++:memset(st,0,sizeof st),JAVA:Arrays.fill(st,false);

热度:44   发布时间:2023-11-25 22:34:01.0

地址

https://leetcode-cn.com/problems/valid-sudoku/submissions/

描述

在这里插入图片描述

代码

y总的代码

class Solution {
    
public:bool isValidSudoku(vector<vector<char>>& b) {
    bool stu[9];//数字 1-9 在每一行只能出现一次。for(int i=0;i<9;i++){
    memset(stu,0,sizeof stu);for(int j=0;j<9;j++){
    if(b[i][j]!='.'){
    int t=b[i][j]-'1';if(stu[t]) return false;else stu[t]= true;}}}//数字 1-9 在每一列只能出现一次。for(int i=0;i<9;i++){
    memset(stu,0,sizeof stu);for(int j=0;j<9;j++){
    if(b[j][i]!='.'){
    int t=b[j][i]-'1';if(stu[t]) return false;else stu[t]= true;}}}//数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次for(int i=0;i<9;i+=3){
    for(int j=0;j<9;j+=3){
    memset(stu,0,sizeof stu);//对于每个3*3矩阵分析for(int x=0;x<3;x++){
    for(int y=0;y<3;y++){
    if(b[i+x][j+y]!='.'){
    int t=b[i+x][j+y]-'1';if(stu[t]) return false;else stu[t]=true;}}}}}return true;}
};

我自己写的C++

class Solution {
    
public:bool isValidSudoku(vector<vector<char>>& board) {
    //每数字 1-9 在每一行只能出现一次。unordered_map<char,int> num;for(int i=0;i<board.size();i++){
    for(int j=0;j<board[0].size();j++){
    if(board[i][j]=='.') continue;if(num[board[i][j]]>0) return false;else num[board[i][j]]++;}//每次执行完毕都要清0num.clear();}num.clear();//清空数组//数字 1-9 在每一列只能出现一次。for(int i=0;i<board[0].size();i++){
    for(int j=0;j<board.size();j++){
    if(board[j][i]=='.') continue;if(num[board[j][i]]>0) return false;else num[board[j][i]]++;}num.clear();}//数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。for(int n=0;n<9;n++){
    for(int i=(n%3)*3;i<(n%3+1)*3;i++){
    for(int j=(n/3)*3;j<(n/3+1)*3;j++){
    if(board[i][j]=='.') continue;if(num[board[i][j]]>0) return false;else num[board[i][j]]++;}}num.clear();}return true;}
};

Java

class Solution {
    public boolean isValidSudoku(char[][] b) {
    int n=9;boolean [] st=new boolean[10];for(int i=0;i<n;i++){
    Arrays.fill(st,false);for(int j=0;j<n;j++){
    if(b[i][j]!='.'){
    int t=b[i][j]-'0';if(st[t]) return false ;else {
    st[t]=true;}}}}for(int i=0;i<n;i++){
    Arrays.fill(st,false);for(int j=0;j<n;j++){
    if(b[j][i]!='.'){
    int t=b[j][i]-'0';if(st[t]) return false ;else {
    st[t]=true;}}}}for(int i=0;i<n;i+=3){
    for(int j=0;j<n;j+=3){
    Arrays.fill(st,false);for(int u=0;u<3;u++){
    for(int v=0;v<3;v++){
    if(b[i+u][j+v]!='.'){
    int t=b[i+u][j+v]-'0';if(st[t]) return false;else st[t]=true;}}}}}return true;}
}
  相关解决方案