Easy

Write a program to find the no of hops requried to reach the end using dynamic programming approach

 
Java Code
import java.util.*;

 class ChildHopDP{
    
        HashMap<Integer, Integer> hash = new HashMap<>();
        int[][] stored = new int[3][3];
    
        public int childHop(int n){
            System.out.print(".");
            if(n < 0) { return 0; }
    
            if(n == 0) { return 1; }
    
            return childHop(n-1) + childHop(n-2) + childHop(n-3);
        }
    
        // using dp
        public int childHopMemo(int n){
            System.out.print(".");
            if(n < 0) { return 0; }
    
            if(n == 0) { return 1; }
            
            if(hash.get(n) == null){
                int x = childHopMemo(n-1) + childHopMemo(n-2) + childHopMemo(n-3);
                hash.put(n,x);
            }
    
            return hash.get(n);
        }
    
        public static void main(String args[]){
    
            int nn = 7;
            ChildHopDP dp = new ChildHopDP();
            System.out.println("The child can use 1, 2 or 3 hops and reach the destination in 
                  "+dp.childHop(nn) + " ways.");
            System.out.println("The child can use 1, 2 or 3 hops and reach the destination in 
                  "+dp.childHopMemo(nn) + " ways.");
        }
  }
Output

.............................................................................................................................................................The child can use 1, 2 or 3 hops and reach the destination in 44 ways.
......................The child can use 1, 2 or 3 hops and reach the destination in 44 ways.
 

Note

In the above output the dot indicates the no of times the childHop() function was called by program.
You can clearly see that in the dp approach, we called the function childHopMemo() less no of times as compared to normal recursion approach.
DP approach allows us to save intermediate function call computations and reuse it, so its fast.

### Complexity Analysis * **Time Complexity**: O(3^N) for recursion, O(N) with memoization. * **Space Complexity**: O(N) for memoization/stack.



Thanks for feedback.

Share Your Thoughts




Read More....
Count the no of possible paths in a matrix using dynamic programming
Browse all Dynamic Programming - DP articles →