CODE

VALID SUDOKU

Arrays & Hashing

public class Solution {
  public bool IsValidSudoku(char[][] board) {
    int[] rowCheck = new int[9];
    int[] colCheck = new int[9];
    for (int i = 0; i < rowCheck.Length; i++)
    {
      rowCheck[i] = 0;
      colCheck[i] = 0;
    }
    
    /* row check */
    for (int i = 0; i < board.Length; i++)
    {
      foreach (var num in board[i])
      {
        if (num != '.')
        {
          rowCheck[(num - '0' - 1)] += 1;
        }
      }
      for (int k = 0; k < rowCheck.Length; k++)
      {
        if (rowCheck[k] > 1)
          return false;
        rowCheck[k] = 0;
      }
    }


    /* col check */
    for (int i = 0; i < board.Length; i++)
    {
      for (int j = 0; j < board.Length; j++)
      {
        if (board[j][i] != '.')
          colCheck[(board[j][i] - '0' - 1)] += 1;
      }
      for (int k = 0; k < colCheck.Length; k++)
      {
        if (colCheck[k] > 1)
          return false;
        colCheck[k] = 0;
      }
    }

    /* subgrid check */
    for (int i = 0; i < 9; i = i + 3)
    {
      for (int j = 0; j < 9; j = j + 3)
      {
        if (!checkSubgrid(board, i, j))
          return false;
      }
    }

    return true;

  }

  private bool checkSubgrid(char[][] board, int row, int col)
  {
    int[] subgrid = new int[9];
    for (int k = 0; k < subgrid.Length; k++)
      subgrid[k] = 0;
    for (int i = row; i < row + 3; i++)
    {
      for (int j = col; j < col + 3; j++)
      {
        if (board[i][j] != '.')
          subgrid[(board[i][j] - '0' - 1)] += 1;
      }
    }
    for (int k = 0; k < subgrid.Length; k++)
    {
      if (subgrid[k] > 1)
        return false;
    }
    return true;
  }
}
					
8
© 2025 Dallas Scott