From 3c3d25ac7b34f5c81b3e5a599fed3e2bf2b48242 Mon Sep 17 00:00:00 2001 From: Bhumit267 Date: Thu, 5 Nov 2026 22:56:50 +0530 Subject: [PATCH] fix(dynamicprogramming): handle n=0 and negative inputs safely in CatalanNumber --- .../thealgorithms/dynamicprogramming/CatalanNumber.java | 8 ++++++++ .../dynamicprogramming/CatalanNumberTest.java | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/main/java/com/thealgorithms/dynamicprogramming/CatalanNumber.java b/src/main/java/com/thealgorithms/dynamicprogramming/CatalanNumber.java index d01066f611bd..b21beafba746 100644 --- a/src/main/java/com/thealgorithms/dynamicprogramming/CatalanNumber.java +++ b/src/main/java/com/thealgorithms/dynamicprogramming/CatalanNumber.java @@ -21,8 +21,16 @@ private CatalanNumber() { * n > 50, BigInteger class should be used instead long * * @return catalanArray[n] the nth Catalan number + * @throws IllegalArgumentException if n is negative */ static long findNthCatalan(int n) { + if (n < 0) { + throw new IllegalArgumentException("n must be non-negative"); + } + if (n <= 1) { + return 1; + } + // Array to store the results of subproblems i.e Catalan numbers from [1...n-1] long[] catalanArray = new long[n + 1]; diff --git a/src/test/java/com/thealgorithms/dynamicprogramming/CatalanNumberTest.java b/src/test/java/com/thealgorithms/dynamicprogramming/CatalanNumberTest.java index a065bb8c2a10..08dcde5decb6 100644 --- a/src/test/java/com/thealgorithms/dynamicprogramming/CatalanNumberTest.java +++ b/src/test/java/com/thealgorithms/dynamicprogramming/CatalanNumberTest.java @@ -1,6 +1,7 @@ package com.thealgorithms.dynamicprogramming; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; @@ -8,7 +9,14 @@ public class CatalanNumberTest { @Test public void testCatalanNumber() { + assertEquals(1, CatalanNumber.findNthCatalan(0)); + assertEquals(1, CatalanNumber.findNthCatalan(1)); assertEquals(42, CatalanNumber.findNthCatalan(5)); assertEquals(16796, CatalanNumber.findNthCatalan(10)); } + + @Test + public void testNegativeInput() { + assertThrows(IllegalArgumentException.class, () -> CatalanNumber.findNthCatalan(-1)); + } }