279.完全な二乗-合計を構成する完全な二乗の数は最小です

正の整数nが与えられた 場合1, 4, 9, 16, ...それらの合計が nに等しくなるようないくつかの完全な平方数(たとえば)を見つけます 合計を構成する完全な正方形の数を最小限に抑える必要があります。

整数を与え  、合計である完全な二乗の最小数を n 返し  ます。n

完全な平方数 とは、その値が別の整数の2乗に等しい整数です。つまり、その値は、整数にそれ自体を掛けた積に等しくなります。以下のために1たとえば、4、、9 および 16 完全な方形であり、 3 そして 11 ません。

 

例1:

入力: n =12
出力: 3 
説明:12 = 4 + 4 + 4

例2:

入力: n =13
出力: 2
説明:13 = 4 + 9

 

促す:

  • 1 <= n <= 104
package Solution279;

import java.util.ArrayList;

class Solution {

	public int numSquares(int n) {
		ArrayList<Integer> coins = new ArrayList<Integer>();
		for (int i = 1; i <= Math.sqrt(n); i++) {
			if (i * i <= n) {
				coins.add(i * i);
			}
		}
		int dp[] = new int[n + 1];
		dp[0] = 0;
		for (int i = 1; i <= n; i++) {
			dp[i] = n + 1;
		}
		for (int coin : coins) {
			for (int amt = 1; amt <= n; amt++) {
				if (amt >= coin) {
					dp[amt] = Math.min(dp[amt], 1 + dp[amt - coin]);
				}
			}
		}
		int minCoinsReq = dp[n] != n + 1 ? dp[n] : -1;
		return minCoinsReq;
	}

	public static void main(String[] args) {

		Solution sol = new Solution();

		int n = 12;

		System.out.println(sol.numSquares(n));
	}

}

同様のトピック:322。変更の変更-合計金額を構成するために必要なコインの最小数

おすすめ

転載: blog.csdn.net/allway2/article/details/115004505