#1259
Hard Algorithms Handshakes that dont cross
Math Dynamic Programming
59.9% acceptance
Mar 31, 2026
253
17
No description available.
Solution
Rust
Time O(n²)
Space O(n)
impl Solution {
pub fn number_of_ways(num_people: i32) -> i32 {
const MOD: i64 = 1_000_000_007;
let n = num_people as usize / 2;
// Catalan number C(n) = C(2n, n) / (n+1)
// Or use DP: dp[0] = 1, dp[i] = sum(dp[j] * dp[i-1-j]) for j=0..i-1
let mut dp = vec![0i64; n + 1];
dp[0] = 1;
for i in 1..=n {
for j in 0..i {
dp[i] = (dp[i] + dp[j] * dp[i - 1 - j]) % MOD;
}
}
dp[n] as i32
}
}