パッケージ dynamicprogramming.medium ; / ** * @Auther:xiaof * @Date:2020/4/23 09:17 * @Description:インタビューの 質問08.11。コイン *コイン。コインの数に制限がない場合、通貨の値は25ポイント、10ポイント、5ポイント、1ポイントです。nポイントを計算するコードを記述する方法はいくつかあります。(結果は大きくなる可能性があります。結果を1000000007に成形する必要があります) * *例1: *入力:n = 5 *出力:2 *説明:合計金額を構成する方法は2つあります: * 5 = 5 * 5 = 1 + 1 + 1 + 1 + 1 *例2: *入力:n = 10 *出力:4 *説明:合計金額を構成する方法は4つあります: * 10 = 10 * 10 = 5 + 5 * 10 = 5 + 1 + 1 + 1 + 1 + 1 * 10 = 1 + 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ミリ秒、 すべての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); } }
リートコードの難易度が中程度のまれな問題です。。。。さあ、オリー