思路
1、动态规划
2、计算使用每一种零钱时候的硬币数量(外层是零钱,内层是价值),dp[i]代表i所需的零钱数量,dp[i] = min(dp[i], dp[i-coin]+1)
3、注意最后的返回条件
代码
class Solution {
public:
/**
* 最少货币数
* @param arr int整型vector the array
* @param aim int整型 the target
* @return int整型
*/
int minMoney(vector<int>& arr, int aim) {
// write code here
sort(arr.begin(), arr.end());
vector<int> dp(aim+1, aim);
dp[0] = 0;
for(auto coin:arr){
for(int i = 1; i<=aim; i++){
if(coin>i){
continue;
}
else{
dp[i] = min(dp[i], dp[i-coin]+1);
}
}
}
return dp[aim]==aim?-1:dp[aim];
}
}; 
京公网安备 11010502036488号