リートコード 279 完全平方数

問題の説明:
整数 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]

おすすめ

転載: blog.csdn.net/Rolandxxx/article/details/128708880