From 34b660e3a3f8cc129ca417a32ae03e52e719a06d Mon Sep 17 00:00:00 2001 From: jackfiled Date: Tue, 30 Apr 2024 12:40:16 +0800 Subject: [PATCH] 20240430 Finished --- src/problem/mod.rs | 3 +- src/problem/p36_valid_sudoku.rs | 77 +++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 src/problem/p36_valid_sudoku.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index 4d16cba..125b581 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -116,4 +116,5 @@ mod p392_is_subsequence; mod p167_two_sum_ii_input_array_is_sorted; mod p209_minimum_size_subarray_sum; mod p30_substring_with_concatenation_of_all_words; -mod p76_minimum_window_substring; \ No newline at end of file +mod p76_minimum_window_substring; +mod p36_valid_sudoku; \ No newline at end of file diff --git a/src/problem/p36_valid_sudoku.rs b/src/problem/p36_valid_sudoku.rs new file mode 100644 index 0000000..4975e48 --- /dev/null +++ b/src/problem/p36_valid_sudoku.rs @@ -0,0 +1,77 @@ +/** + * [36] Valid Sudoku + */ +pub struct Solution {} + +// submission codes start here +use std::collections::HashSet; + +impl Solution { + pub fn is_valid_sudoku(board: Vec>) -> bool { + let mut set = HashSet::new(); + + for i in 0..9 { + for j in 0..9 { + if board[i][j] == '.' { + continue; + } + + if set.contains(&board[i][j]) { + return false; + } + + set.insert(board[i][j]); + } + + set.clear(); + } + + for i in 0..9 { + for j in 0..9 { + if board[j][i] == '.' { + continue; + } + + if set.contains(&board[j][i]) { + return false; + } + + set.insert(board[j][i]); + } + + set.clear(); + } + + for w in (0..9).step_by(3) { + for h in (0..9).step_by(3) { + for i in 0..3 { + for j in 0..3 { + if board[w + i][h + j] == '.' { + continue; + } + + if set.contains(&board[w + i][h + j]) { + return false; + } + + set.insert(board[w + i][h + j]); + } + } + + set.clear(); + } + } + + true + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_36() {} +}