Journal Archive

/**
 * @param {character[][]} board
 * @return {boolean}
 */
var isValidSudoku = function(board) {
	//base case
    if (!board) return false;
    // helper function for verifying subBox
    const isValidSubBox = coord => {
        let [r,c] = coord;
        let box = new Set();
        let isValid = true;
        
        let direction = [[-1,-1],[-1,0],[-1,1],
                        [0,-1],[0,0],[0,1],
                        [1,-1],[1,0],[1,1]];
        direction.forEach(([dy, dx]) => {
            if (board[r + dy][c + dx] !== ".") {
                if (box.has(board[r + dy][c + dx])) {
                    isValid = false;
                };
                box.add(board[r + dy][c + dx]);
            }
        });
        return isValid;
    }
    
    rows: for (let i = 0; i < 9; i++) {
		// explore rows and columns
        let row = new Set();
        let column = new Set();
        columns: for (let j = 0; j < 9; j++) {
            let r = board[i][j];
            let c = board[j][i];
            // check for sub box when in the center of each sub box
            if ((i === 1 && (j === 1 ||j === 4 ||j === 7)) ||
               (i === 4 && (j === 1 ||j === 4 ||j === 7)) ||
               (i === 7 && (j === 1 ||j === 4 ||j === 7))) {
                if (!isValidSubBox([i,j])) return false;
            }
            
            if (r !== ".") {
                if (row.has(r)) return false;
                row.add(r);
            } 
            if (c !== ".") {
                if (column.has(c)) return false;
                column.add(c);
            }
            
        }
    }
    
    return true;
};

Day 36: Solving one of LeetCode problems

36. Valid Sudoku Difficulty - Meidum

Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:

  1. Each row must contain the digits 1-9 without repetition.
  2. Each column must contain the digits 1-9 without repetition.
  3. Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition.

Note:

  • A Sudoku board (partially filled) could be valid but is not necessarily solvable.
  • Only the filled cells need to be validated according to the mentioned rules.

 

Example 1:

Input: board = 
		[["5","3",".",".","7",".",".",".","."]
		,["6",".",".","1","9","5",".",".","."]
		,[".","9","8",".",".",".",".","6","."]
		,["8",".",".",".","6",".",".",".","3"]
		,["4",".",".","8",".","3",".",".","1"]
		,["7",".",".",".","2",".",".",".","6"]
		,[".","6",".",".",".",".","2","8","."]
		,[".",".",".","4","1","9",".",".","5"]
		,[".",".",".",".","8",".",".","7","9"]]
Output: true
		

Example 2:

Input: board = 
		[["8","3",".",".","7",".",".",".","."]
		,["6",".",".","1","9","5",".",".","."]
		,[".","9","8",".",".",".",".","6","."]
		,["8",".",".",".","6",".",".",".","3"]
		,["4",".",".","8",".","3",".",".","1"]
		,["7",".",".",".","2",".",".",".","6"]
		,[".","6",".",".",".",".","2","8","."]
		,[".",".",".","4","1","9",".",".","5"]
		,[".",".",".",".","8",".",".","7","9"]]
Output: false
Explanation: Same as Example 1, except with the 5 in the top left corner being modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid.