Skip to main content

rustgym/leetcode/
_36_valid_sudoku.rs

1struct Solution;
2
3use std::collections::HashSet;
4
5impl Solution {
6    fn is_valid_sudoku(board: Vec<Vec<char>>) -> bool {
7        let mut rows: Vec<HashSet<char>> = vec![HashSet::new(); 9];
8        let mut cols: Vec<HashSet<char>> = vec![HashSet::new(); 9];
9        let mut boxes: Vec<HashSet<char>> = vec![HashSet::new(); 9];
10        for i in 0..9 {
11            for j in 0..9 {
12                let c = board[i][j];
13                if c == '.' {
14                    continue;
15                }
16                if !rows[i].insert(c) {
17                    return false;
18                }
19
20                if !cols[j].insert(c) {
21                    return false;
22                }
23
24                let k = (i / 3) * 3 + (j / 3);
25                if !boxes[k].insert(c) {
26                    return false;
27                }
28            }
29        }
30        true
31    }
32}
33
34#[test]
35fn test() {
36    let board = vec_vec_char![
37        ['5', '3', '.', '.', '7', '.', '.', '.', '.'],
38        ['6', '.', '.', '1', '9', '5', '.', '.', '.'],
39        ['.', '9', '8', '.', '.', '.', '.', '6', '.'],
40        ['8', '.', '.', '.', '6', '.', '.', '.', '3'],
41        ['4', '.', '.', '8', '.', '3', '.', '.', '1'],
42        ['7', '.', '.', '.', '2', '.', '.', '.', '6'],
43        ['.', '6', '.', '.', '.', '.', '2', '8', '.'],
44        ['.', '.', '.', '4', '1', '9', '.', '.', '5'],
45        ['.', '.', '.', '.', '8', '.', '.', '7', '9']
46    ];
47    assert_eq!(Solution::is_valid_sudoku(board), true);
48    let board = vec_vec_char![
49        ['8', '3', '.', '.', '7', '.', '.', '.', '.'],
50        ['6', '.', '.', '1', '9', '5', '.', '.', '.'],
51        ['.', '9', '8', '.', '.', '.', '.', '6', '.'],
52        ['8', '.', '.', '.', '6', '.', '.', '.', '3'],
53        ['4', '.', '.', '8', '.', '3', '.', '.', '1'],
54        ['7', '.', '.', '.', '2', '.', '.', '.', '6'],
55        ['.', '6', '.', '.', '.', '.', '2', '8', '.'],
56        ['.', '.', '.', '4', '1', '9', '.', '.', '5'],
57        ['.', '.', '.', '.', '8', '.', '.', '7', '9']
58    ];
59    assert_eq!(Solution::is_valid_sudoku(board), false);
60}