package dynamicprogramming.medium; /** * @Auther: xiaof * @Date: 2020/4/23 09:17 * @Description:面試題 08.11. 硬幣 * 硬幣。給定數量不限的硬幣,幣值爲25分、10分、5分和1分,編寫代碼計算n分有幾種表示法。(結果可能會很大,你需要將結果模上1000000007) * * 示例1: * 輸入: n = 5 * 輸出:2 * 解釋: 有兩種方式可以湊成總金額: * 5=5 * 5=1+1+1+1+1 * 示例2: * 輸入: n = 10 * 輸出:4 * 解釋: 有四種方式可以湊成總金額: * 10=10 * 10=5+5 * 10=5+1+1+1+1+1 * 10=1+1+1+1+1+1+1+1+1+1 * 說明: * 注意: * 你可以假設: * 0 <= n (總金額) <= 1000000 * * 來源:力扣(LeetCode) * 鏈接:https://leetcode-cn.com/problems/coin-lcci * 著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。 */ public class WaysToChange { /** * * 功能描述: *執行用時 : 46 ms , 在所有 Java 提交中擊敗了 34.42% 的用戶 * 內存消耗 : 43.8 MB , 在所有 Java 提交中擊敗了 100.00% 的用戶 * @author: xiaof * @date: 2020/4/23 9:41 * @Description: */ public int solution(int n) { //動態規劃,f(n)=f(n-{1,5,10,25}) + x, int[] res = new int[n + 1], money = new int[]{1,5,10,25}; res[0] = 0; res[1] = 1; for (int j : money) { for (int i = 2; i <= n; ++i) { if (i > j) { res[i] = (res[i] + res[i - j]) % 1000000007; } else if (i == j) { res[i] += 1; } } } return res[n]; } public static void main(String[] args) { WaysToChange fuc = new WaysToChange(); int n1 = 10; int n2 = 900750; fuc.solution(n2); } }
少見的能自己做出來的leetcode中等難度的題。。。。加油,奧利給