Skip to main content
Back to problems
#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)
LeetCode
solution.rs
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
  }
}