题解:此题应用 递归+贪心思想解题,先拿一堆,一次先拿两枚硬币再拿一枚硬币,拿完一堆再拿下一堆,直到所有硬币堆拿完
class Solution {
public int minCount(int[] coins) {
ArrayList<Integer> res=new ArrayList<>(); //创建用于统计结果的集合
minCountCore(coins,0,res); //dfs求解,从第0堆硬币开始拿
return res.size(); //统计到硬币的次数
}
static void minCountCore(int[] coins,int cur,ArrayList<Integer> res ) {
if (cur>coins.length-1) //所有硬币堆拿完
return ;
if (coins[cur]==0) { //一堆拿完则返回
return;
}
if (coins[cur]-2>=0) //先拿两枚
{
coins[cur]-=2; //原硬币堆中个数减2
res.add(1); //拿的次数加1
minCountCore(coins,cur,res);
}else if(coins[cur]-1>=0) { //再拿一枚
coins[cur]-=1; //原硬币堆中个数减1
res.add(1); //拿的次数加1
}
minCountCore(coins,cur+1,res); //拿下一堆
}
}