問題の説明:
整数 n を指定して、和が n となる完全平方数の最小数を返します。
完全平方数は、その値が別の整数の 2 乗に等しい整数です。つまり、その値は、整数と整数を掛け合わせた積に等しい値です。たとえば、1、4、9、16 はすべて完全平方数ですが、3 と 11 はそうではありません。
例:
入力: n = 12
出力: 3
説明: 12 = 4 + 4 + 4
ソリューション: 動的プログラミング ソリューション、動的プログラミング ソリューション
class Solution:
def numSquares(self, n: int) -> int:
nums = []
i = 1
while i*i <= n:
nums.append(i*i)
i += 1
target = n
length = len(nums)
dp = [[target+1]*(target+1) for _ in range(length+1)]
dp[0][0] = 0
for i in range(1,length+1):
for j in range(target+1):
if j < nums[i-1]:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = min(dp[i-1][j], dp[i][j-nums[i-1]]+1)
return dp[length][target]