当前位置: 首页剑指offer刷题第六期问题详情 【动态规划专题】LeetCode 322. 零钱兑换 本问题对应课程链接:剑指offer刷题第六期 要求: 1、请打卡你的解题代码,如果能简单说一下思路则简单说一下思路。 2、给出你代码所用的时间复杂度和空间复杂度
共以下 6 个回答
class Solution {
public int coinChange(int[] coins, int amount) {
int[] dp = new int[amount + 1];//dp[i]为i元钱的最少硬币数
for(int i = 0; i < coins.length; i++)
if(coins[i] < amount + 1)
dp[coins[i]] = 1;
dp[0] = 0;
for(int i = 1; i <= amount; i++){
boolean finded = false;
int min = Integer.MAX_VALUE;
for(int j = 0; j < coins.length;j++){
if(i – coins[j] >= 0 && dp[i – coins[j]] != -1){
min = Math.min(min,dp[i – coins[j]] + 1);
finded = true;
}
}
if(!finded)
dp[i] = -1;
else
dp[i] = min;
}
return dp[amount] ;
}
//时间复杂度On
//空间复杂度On
思路:dp[i] 表示由 coins 提供的金币组成 总数 amount 使用的最小金币数量,则对于 dp[i] 的值,可以由 min(dp[i], dp[i-coins[j]])得出
“`c++& coins, int amount) { dp(amount+1, amount+1); amount ? -1 : dp[amount];
class Solution {
public:
int coinChange(vector
vector
dp[0] = 0;
for (int i=1; i<=amount; i++) { for (int j=0; j
}
};
“`