解决了硬币找零问题,使用动态规划方法。如果你想将这个算法转换成C语言的代码,这里有一个相应的版本:
```c
#include <stdio.h>
#include <stdlib.h>
int coinChange(int* coins, int coinsSize, int amount) {
int* dp = (int*) malloc((amount + 1) * sizeof(int));
for (int i = 0; i <= amount; i++) {
dp[i] = amount + 1;
}
dp[0] = 0;
for (int i = 1; i <= amount; i++) {
for (int j = 0; j < coinsSize; j++) {
if (coins[j] <= i) {
dp[i] = (dp[i] < dp[i - coins[j]] + 1) ? dp[i] : dp[i - coins[j]] + 1;
}
}
}
int result = (dp[amount] > amount) ? -1 : dp[amount];
free(dp);
return result;
}
int main() {
int coins[] = {1, 2, 5};
int coinsSize = sizeof(coins) / sizeof(coins[0]);
int amount = 11;
printf("Minimum coins required: %d\n", coinChange(coins, coinsSize, amount));
return 0;
}
```
这段C语言代码与Java版本的基本逻辑相同,使用了动态规划方法来计算给定金额最少需要多少个硬币。在C语言中,我们需要手动管理内存分配和释放。