Skip to content

Commit 70d6c40

Browse files
committed
solution: Valid Sudoku
1 parent a1b40bd commit 70d6c40

File tree

2 files changed

+102
-0
lines changed

2 files changed

+102
-0
lines changed

src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ mod two_sum;
3535
mod unique_email_addresses;
3636
mod unique_morse_code_words;
3737
mod valid_parentheses;
38+
mod valid_sudoku;
3839
mod zigzag_conversion;
3940

4041
fn main() {

src/valid_sudoku.rs

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/// @number 36
2+
/// @title Valid Sudoku
3+
/// @url https://leetcode.com/problems/valid-sudoku/
4+
/// @difficulty Medium
5+
6+
struct Solution;
7+
8+
impl Solution {
9+
pub fn is_valid_sudoku(board: Vec<Vec<char>>) -> bool {
10+
use std::collections::HashSet;
11+
//line validate
12+
for line in &board {
13+
let mut set = HashSet::new();
14+
for c in line {
15+
if c != &'.' {
16+
if set.contains(c) {
17+
return false;
18+
}
19+
set.insert(c);
20+
}
21+
}
22+
}
23+
24+
// column validate
25+
for i in 0..9 {
26+
let mut set = HashSet::new();
27+
for j in 0..9 {
28+
let x = &board[j][i];
29+
if x != &'.' {
30+
if set.contains(x) {
31+
return false;
32+
}
33+
set.insert(x);
34+
}
35+
}
36+
}
37+
38+
//sub-box validate
39+
for i in 0..3 {
40+
let i = i * 3;
41+
for j in 0..3 {
42+
let j = j * 3;
43+
44+
let mut set = HashSet::new();
45+
46+
for k in 0..3 {
47+
for l in 0..3 {
48+
let x = &board[i + k][j + l];
49+
if x != &'.' {
50+
if set.contains(x) {
51+
return false;
52+
}
53+
set.insert(x);
54+
}
55+
}
56+
}
57+
}
58+
}
59+
60+
true
61+
}
62+
}
63+
64+
#[cfg(test)]
65+
mod test {
66+
use crate::valid_sudoku::Solution;
67+
68+
#[test]
69+
fn test() {
70+
let sudoku = vec![
71+
vec!['5', '3', '.', '.', '7', '.', '.', '.', '.'],
72+
vec!['6', '.', '.', '1', '9', '5', '.', '.', '.'],
73+
vec!['.', '9', '8', '.', '.', '.', '.', '6', '.'],
74+
vec!['8', '.', '.', '.', '6', '.', '.', '.', '3'],
75+
vec!['4', '.', '.', '8', '.', '3', '.', '.', '1'],
76+
vec!['7', '.', '.', '.', '2', '.', '.', '.', '6'],
77+
vec!['.', '6', '.', '.', '.', '.', '2', '8', '.'],
78+
vec!['.', '.', '.', '4', '1', '9', '.', '.', '5'],
79+
vec!['.', '.', '.', '.', '8', '.', '.', '7', '9'],
80+
];
81+
82+
assert_eq!(true, Solution::is_valid_sudoku(sudoku));
83+
}
84+
85+
#[test]
86+
fn test2() {
87+
let sudoku = vec![
88+
vec!['8', '3', '.', '.', '7', '.', '.', '.', '.'],
89+
vec!['6', '.', '.', '1', '9', '5', '.', '.', '.'],
90+
vec!['.', '9', '8', '.', '.', '.', '.', '6', '.'],
91+
vec!['8', '.', '.', '.', '6', '.', '.', '.', '3'],
92+
vec!['4', '.', '.', '8', '.', '3', '.', '.', '1'],
93+
vec!['7', '.', '.', '.', '2', '.', '.', '.', '6'],
94+
vec!['.', '6', '.', '.', '.', '.', '2', '8', '.'],
95+
vec!['.', '.', '.', '4', '1', '9', '.', '.', '5'],
96+
vec!['.', '.', '.', '.', '8', '.', '.', '7', '9'],
97+
];
98+
99+
assert_eq!(false, Solution::is_valid_sudoku(sudoku));
100+
}
101+
}

0 commit comments

Comments
 (0)