From 2da0c3af3b91a7d869bb1f05a8bd16d7c8db224f Mon Sep 17 00:00:00 2001 From: jackfiled Date: Thu, 15 Aug 2024 12:59:10 +0800 Subject: [PATCH] 20240815 Finished --- src/problem/mod.rs | 3 +- src/problem/p221_maximal_square.rs | 46 ++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/problem/p221_maximal_square.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index fa7e77a..c672abc 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -204,4 +204,5 @@ mod p63_unique_paths_ii; mod p97_interleaving_string; mod p72_edit_distance; mod p123_best_time_to_buy_and_sell_stock_iii; -mod p188_best_time_to_buy_and_sell_stock_iv; \ No newline at end of file +mod p188_best_time_to_buy_and_sell_stock_iv; +mod p221_maximal_square; \ No newline at end of file diff --git a/src/problem/p221_maximal_square.rs b/src/problem/p221_maximal_square.rs new file mode 100644 index 0000000..111f6d0 --- /dev/null +++ b/src/problem/p221_maximal_square.rs @@ -0,0 +1,46 @@ +/** + * [221] Maximal Square + */ +pub struct Solution {} + + +// submission codes start here + +impl Solution { + pub fn maximal_square(matrix: Vec>) -> i32 { + let (m, n) = (matrix.len(), matrix[0].len()); + let mut dp = vec![vec![0; n]; m]; + + let mut result: i32 = 0; + for i in 0..m { + for j in 0..n { + if matrix[i][j] == '0' { + continue; + } + + if i == 0 || j == 0 { + dp[i][j] = 1; + } else { + dp[i][j] = dp[i - 1][j - 1].min(dp[i - 1][j]).min(dp[i][j - 1]) + 1; + } + + result = result.max(dp[i][j]); + } + } + + result.pow(2) + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_221() { + assert_eq!(1, Solution::maximal_square(vec![vec!['0', '1'], vec!['1', '0']])); + assert_eq!(0, Solution::maximal_square(vec![vec!['0']])); + } +}