zoukankan      html  css  js  c++  java
  • 167-279. 完全平方数

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。(第一个我写的)
    import math
    
    class Solution(object):
        def numSquares1(self, n):
            """
            :type n: int
            :rtype: int
            """
            if n < 2:
                return 1
            dp = [0 for _ in range(n + 1)]
            dp[0] = 0
            dp[1] = 1
            for i in range(2, n + 1):
                squ = math.floor(math.sqrt(i))
                squ_num2 = 1 if math.sqrt(i).is_integer() else float("inf")
                if squ_num2 == 1:
                    dp[i] = 1
                    continue
    
                min_squ_num = float("inf")
                for j in range(squ):
                    squ_num = dp[(squ - j) ** 2] + dp[i - (squ - j) ** 2]
                    min_squ_num = min(min_squ_num, squ_num)
                    if min_squ_num == 2:
                        break
                dp[i] = min(min_squ_num, squ_num2)
            return dp[n]
    
        def is_square(self, n):
            sq = int(math.sqrt(n))
            return sq*sq == n
    
        def numSquares(self, n):
            """
            :type n: int
            :rtype: int
            """
            # 为什么n % 4 = n & 3,其实n % 8 = n & 7 ,n % 16 = n & 15 你发现什么了么?
            while n & 3 == 0:
                n /= 4
            if n & 7 == 7:
                return 4
            if self.is_square(n):
                return 1
            for i in range(1, int(math.sqrt(n))+1):
                if self.is_square(n-i*i):
                    return 2
            return 3
    
  • 相关阅读:
    【javascript】select操作实例
    【javascript】函数
    【javascript】一些资料
    【javascript】操作符:一元操作符
    动态执行Sql
    索引( index )
    事务
    用户相关
    视图(view)
    函数(function)
  • 原文地址:https://www.cnblogs.com/liuzhanghao/p/14384449.html
Copyright © 2011-2022 走看看