aboutsummaryrefslogtreecommitdiff
path: root/valid_sudoku.rs
blob: 3c2f591f842b746e270cb6a3763a55d7f866580d (plain)
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
struct Solution;

impl Solution {
    pub fn is_valid_sudoku(board: Vec<Vec<char>>) -> bool {
        let mut rows: [u16; 9] = [0; 9];
        let mut cols: [u16; 9] = [0; 9];
        let mut blck: [u16; 9] = [0; 9];
        for i in 0..9 {
            for j in 0..9 {
                match board[i][j] {
                    '.' => continue,
                    c => {
                        let b: usize = (i / 3) * 3 + (j / 3);
                        let curr = 1 << (c.to_digit(10).unwrap());
                        if rows[i] & curr != 0 || cols[j] & curr != 0 || blck[b] & curr != 0 {
                            return false;
                        }
                        rows[i] |= curr;
                        cols[j] |= curr;
                        blck[b] |= curr;
                    }
                }
            }
        }
        true
    }
}