C++ : Is my approach good? How to make this efficient?


#1

bool isValidSubGrid(const vector &A ,int row , int col)
{

unordered_map<char,bool> isPresent;

for(int i = row ;  i <row+3 ; i++)
{
    for(int j = col ; j<col+3 ; j++)
    {
       if(A[i][j]!='.')
       {
            char x = A[i][j];
            if(isPresent[x]) return false;
            isPresent[x] = true;
       }
    }
}

return true;

}

bool isValidRow(const vector &A,int row)
{

unordered_map<char,bool> isPresent;

for(int j = 0 ; j < 9 ; j++)
{
    if(A[row][j]!='.')
       {
            char x = A[row][j];
            if(isPresent[x]) return false;
            isPresent[x] = true;
       }
}

return true;
}

bool isValidCol(const vector &A,int col)
{

unordered_map<char,bool> isPresent;

for(int i = 0 ; i < 9 ; i++)
{
    if(A[i][col]!='.')
       {
           
            char x = A[i][col];
            if(isPresent[x]) return false;
            isPresent[x] = true;
       }
}

return true;
}

int Solution::isValidSudoku(const vector &A)
{

for(int i = 0 ; i < 9 ; i+=3)
{
    for(int j = 0 ; j <9 ; j+=3)
    {
        if(isValidSubGrid(A , i , j) == false) return false;

    }

}

for(int i = 0 ; i < 9 ; i++)
{
if(isValidRow(A,i) == false) return false;
}

for(int j = 0 ; j < 9 ; j++)
{
if(isValidCol(A,j) == false) return false;
}

return true;

}