public int coinChange(int[] coins, int value) {

        if(coins==null || coins.length==0)return -1;

        Arrays.sort(coins);

        int[] dp= new int[value+1];

        findMinRecursive(coins, value, dp);

        return dp[value] == Integer.MAX_VALUE ? -1 : dp[value];
    }
This is DP solution, using bottom up approach we can identify how many coins take to make up given value.
src/problems/medium/CoinChange.java