自己做网站的流程电商网站运营
题目链接:322. 零钱兑换 - 力扣(LeetCode)
这道题目使用动态规划
状态转移方程:
dp[j] = min(dp[j], dp[j-coins[i]]+1);
但是做这道题目遇到些小问题,这里提一下
1、一开始是将dp初始化为INT_MAX的。但提交会报错
int min(int a, int b){return a >= b ? b : a;
}int coinChange(int* coins, int coinsSize, int amount) {int dp[amount+1];for (int i = 0; i <= amount; i++) {dp[i] = INT_MAX;}dp[0] = 0;for (int i = 0; i < coinsSize; i++) {for (int j = coins[i]; j <= amount; j++) {if (j-coins[i] >= 0) {dp[j] = min(dp[j], dp[j-coins[i]]+1);}}}if (dp[amount] == INT_MAX)return -1;elsereturn dp[amount];
}
报错截图
遂将dp初始化为amount,但只通过179 / 189,原因是amount为0时,答案错误
最后将dp初始化为amount+1,通过
int min(int a, int b){return a >= b ? b : a;
}int coinChange(int* coins, int coinsSize, int amount) {int dp[amount+1];for (int i = 0; i <= amount; i++) {dp[i] = amount+1;}dp[0] = 0;for (int i = 0; i < coinsSize; i++) {for (int j = coins[i]; j <= amount; j++) {if (j-coins[i] >= 0) {dp[j] = min(dp[j], dp[j-coins[i]]+1);}}}if (dp[amount] == amount+1)return -1;elsereturn dp[amount];
}