/*
* 算法思想:
* 动态规划
*/
int cmp(const void *a, const void *b){
return *(int *)b - *(int *)a;
}
void print(int *a, int l){
int i;
for(i=0; i<l; i++)
printf("%4d,", a[i]);
printf("\n");
}
int min(int a, int b){
return a<b ? a:b;
}
int coinChange(int* coins, int coinsSize, int all){
int arr[all+1],tmp = 0;
int i, j;
if(!all || !coins) return 0;
qsort(coins, coinsSize, sizeof(int), cmp);
// memset(arr, 0, sizeof(arr));
for(i=0; i<=all; i++){
arr[i] = all+1;
}
arr[0] = 0;
for(i=1; i<=all; i++){
// printf("coinsSize = %d \n", coinsSize);
//printf("");
for(j=0; j<coinsSize ; j++){
tmp = i-coins[j];
if(tmp < 0 ) continue;
// print(arr, all+1);
tmp = min(arr[i], arr[i-coins[j]]+1);
// printf("tmp = %d \n", tmp);
arr[i] = tmp;
}
}
//print(arr, all+1);
if(arr[all] == all+1){
return -1;
}
return arr[all];
}
leetcode-322-零钱兑换-C语言
最新推荐文章于 2022-06-18 20:35:54 发布