硬币找零问题自上而下的方法:未能解决以下面额为[357,239,73,52]和总计9832的情况

时间:2020-08-17 19:34:05

标签: java algorithm data-structures

public int coinChange(int[] coins, int amount) {
        return coinChange(coins, amount, 0, new Integer[amount+1]);
    }
    
    private int coinChange(int[] coins, int remaining, int start, Integer[] memo){
        if(remaining == 0){
            return 0; 
        }
        
        if(remaining<0){
            return -1;
        }
        
        if(memo[remaining]!=null){
            return memo[remaining];
        }
        
        int min = Integer.MAX_VALUE;

        
//but if I am running loop from i=0 it passes , I think it should work from start as well, as it already discover the optimal min in previous steps for example for [5,1,3,2] coins denominations ,if I have to make 11 than going from 5 exploring 3,  is same as going from 3 exploring 5, that's why I am staring from start.
for(int i=start; i<coins.length; i++){
            int res = coinChange(coins, remaining-coins[i], i, memo);
            if(res>=0){
                min = Math.min(min, res+1);
            }   
        }
        min = ((min == Integer.MAX_VALUE) ? -1:min);
        return memo[remaining] = min;
    }

0 个答案:

没有答案