-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy path36__medium__valid-sudoku.js
86 lines (75 loc) · 2.37 KB
/
36__medium__valid-sudoku.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:
Each row must contain the digits 1-9 without repetition.
Each column must contain the digits 1-9 without repetition.
Each of the 9 3x3 sub-boxes of the grid must contain the digits 1-9 without repetition.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'.
Example 1:
Input:
[
["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:
[
["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.
*/
/**
* @param {character[][]} board
* @return {boolean}
*/
/**
*
* O(n) time
* O(n) space (3n)
*
* 15m
*/
var isValidSudoku = function(board) {
if (!board || board.length === 0 || board[0].length === 0) return false;
let rows = board.length;
let cols = board[0].length;
let hashset = new Set(); // hashset
for (let r = 0; r < rows; r++) {
for (let c = 0; c < cols; c++) {
let num = board[r][c];
if (num === ".") continue;
let rowKey = "r" + r + "|" + num;
let colKey = "c" + c + "|" + num;
let gridKey = "g" + (~~(r / 3) * 3 + ~~(c / 3)) + "|" + num;
if (
!hashset.has(rowKey) &&
!hashset.has(colKey) &&
!hashset.has(gridKey)
) {
hashset.add(rowKey);
hashset.add(colKey);
hashset.add(gridKey);
} else {
return false;
}
}
}
return true;
};