給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。
示例 1:
輸入: coins = [1, 2, 5], amount = 11
輸出: 3
解釋: 11 = 5 + 5 + 1
示例 2:
輸入: coins = [2], amount = 3
輸出: -1
說明:你可以認為每種硬幣的數量是無限的。
有一定數量的q,各種面值的,要組裝成目標的值,最少多少張。
動態規劃,看dp[i],金額i最少用多少張,
dp[i]和min(dp[i-coins[j]]+1)是一樣的,白話的將就是,你最終要拿的金額如何少拿一張,最優是啥?
詳細解釋關注 b站 【c語言全**】學渣帶你刷leetcode 不走丟
#include #include int coinchange(int* coins, int coinssize, int amount)
dp[0]=0;
int m,n;
for(m=1; m<=amount; m++)}}
}return dp[amount];
}int main()
int result=coinchange(coins, coinssize, amount);
printf("%d",result);
return 0;
}
學渣帶你刷Leetcode0035搜尋插入位置
給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 示例 3 輸入 1,3,5,6 7 輸出 4 示例 4 輸入...
學渣帶你刷Leetcode0063不同路徑 II
乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用 1 和 0 來表示。說明 m...
學渣帶你刷Leetcode0066加一
給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1 輸入 1,2,3 輸出 1,2,4 解釋 輸入陣列表示數字 123。示例 2 輸入 4,3,2,1 輸出 4,3,...