每天寫一道演算法題(1) 零錢兌換

2021-09-25 08:00:07 字數 929 閱讀 8040

題目**-力扣(leetcode)

給定不同面額的硬幣和乙個總金額。寫出函式來計算可以湊成總金額的硬幣組合數。假設每一種面額的硬幣有無限個。

輸入: amount = 5, coins = [1, 2, 5]

輸出: 4

解釋: 有四種方式可以湊成總金額:

5=55=2+2+1

5=2+1+1+1

5=1+1+1+1+1

#includeusing namespace std;

int main();

int coins[5005] = ;

int amount, n;

int i, j, k;

cin >> amount >> n;

for (i = 0; i < n; i++)

cin >> coins[i];

dp[0] = 1;

for (i = 0; i < n; i++) }

cout << dp[amount] << endl;

return 0;

}

這道題思路很明顯是一道動態規劃題,如果每枚硬幣只能放入一次,那麼dp[j]=dp[j]+dp[j-coins[i]],題目中說每枚硬幣有無限,那麼dp[j]=太長時間沒摸演算法,上來寫成了

for (i = 0; i < n; i++)

}

這樣的話就會有乙個重複的問題,以測試資料為例第一枚硬幣放入的時候

[1,1,0,0,0]  -第一次迴圈

[1,1,2,0,0]  -第二次迴圈

可以看到明顯dp[2]累加了兩次。

以後寫動態規劃,還不熟練的時候還是先推公式,然後根據公式寫**

寫完之後再考慮一下,每次在迴圈裡判斷j>coins[i]是沒有必要的,當j這樣又可以減少一多半的時間。。。。

每天一道演算法題

no.1 棧是特殊的線性表,它。a.對 b.錯答案 錯,它的插入和刪除都是在同一端進行的。no.2 n個葉子節點的滿二叉樹 除了葉子節點,每個節點都有兩個孩子 總共有多少個節點?a.2n 1 b.2n c.n 1 d.n答案 a 滿二叉樹我們講過了,度為0的節點比度為2的加點多乙個。滿二叉樹是特殊的...

每天一道演算法題

1.給定乙個只包括 的字串,判斷字串是否匹配。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。思路 正確思路 不需要考慮輸入內容是否合法,這只是做題,不是工程 定義乙個字典,後括號為鍵,前半部分為值 定義乙個元素儲存棧頂,注意這個設定,取棧...

每天一道演算法題

1 js計算某個字串出現的次數 j ascript計算乙個字串最多重複的字元及出現次數.var str zhaochucichuzuiduodezifu var o for var i 0,length str.length i length i else console.log o 輸出的是完整的...