去力扣找了一个解答是动规优化的,emmm我感觉我那个的主要问题还是优化不到位,应该先排序然后从大的开始往小的找,最坏情况才会是我那个算法的情况,而且用了k还会少很多分支 var minMoney = function(coins, amount) { if(!amount) return 0; coins.sort((a,b) => b - a); let ans = Infinity;//最小面值数 let len = coins.length; coinChange(amount, 0, 0);//当前总金额,当前coins的下标,当前面值数 return ans === Infinity ? -1 : ans; function coinChange(amount, index, count) { if(!amount) { ans = Math.min(ans, count); return; } if(index === len) return; for(let k = (amount / coins[index])|0; k >= 0 && k + count < ans; k --) { //k + count < ans 优化剪枝 //k用来贪心思想 //k从(amount / coins[index])|0开始,所以不会小于0 coinChange(amount - k * coins[index], index + 1,count + k); } } };
点赞 3

相关推荐

投递华为等公司10个岗位
点赞 评论 收藏
转发
牛客网
牛客企业服务