【LEETCODE】76、面试题 08.11. 硬币
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中等难度的题。。。。加油,奥利给