diff --git a/src/main/java/io/zipcoder/Problem2.java b/src/main/java/io/zipcoder/Problem2.java index e0af6a0..feed371 100644 --- a/src/main/java/io/zipcoder/Problem2.java +++ b/src/main/java/io/zipcoder/Problem2.java @@ -1,4 +1,50 @@ package io.zipcoder; +import java.util.ArrayList; +import java.util.List; + public class Problem2 { + + public static String fibSequence(Integer num) { + + List fib = new ArrayList<>(); + fib.add(0); + fib.add(1); + + for(int i = 1; i < num; i++) { + if(fib.get(fib.size() - 2) + fib.get(fib.size() - 1) > num) { + break; + } + Integer newNum = fib.get(fib.size() - 1) + fib.get(fib.size() - 2); + fib.add(newNum); + i = newNum; + } + + StringBuilder sb = new StringBuilder(); + for(Integer key : fib) { + sb.append(Integer.toString(key) + ", "); + } + return sb.toString().substring(0, sb.length() - 2); + } + + public static String fibRecursion(Integer num, List fib) { + + if(fib.size() == 0) { + fib.add(0); + fib.add(1); + } + + if(fib.get(fib.size() - 2) + fib.get(fib.size() - 1) > num) { + StringBuilder sb = new StringBuilder(); + for(Integer key : fib) { + sb.append(Integer.toString(key) + ", "); + } + return sb.toString().substring(0, sb.length() - 2); + } + + Integer newNum = fib.get(fib.size() - 1) + fib.get(fib.size() - 2); + fib.add(newNum); + + return fibRecursion(num, fib); + } } diff --git a/src/test/java/io/zipcoder/Problem2Test.java b/src/test/java/io/zipcoder/Problem2Test.java index fa9ffa5..4f4c4f2 100644 --- a/src/test/java/io/zipcoder/Problem2Test.java +++ b/src/test/java/io/zipcoder/Problem2Test.java @@ -1,4 +1,30 @@ package io.zipcoder; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static io.zipcoder.Problem2.fibRecursion; +import static io.zipcoder.Problem2.fibSequence; + public class Problem2Test { + + @Test + public void fibTest() { + String expected = "0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144"; + String actual = fibSequence(150); + + Assert.assertEquals(expected, actual); + } + + @Test + public void fibRecursionTest() { + String expected = "0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144"; + List list = new ArrayList<>(); + String actual = fibRecursion(150, list); + + Assert.assertEquals(expected, actual); + } }