zoukankan      html  css  js  c++  java
  • 完全平方数

    题目

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

    示例 1:

    输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2:

    输入: n = 13 输出: 2 解释: 13 = 4 + 9.

    解题思路

    我们先用比较容易想到的动态规划来解决这道题,我们知道 n = 1 时,最少只需要 1 个完全平方数 1 即可。问题就在于其他情况的状态转移方程。

    dp[i]:表示完全平方数和为i的 最小个数 初始状态dp[i]均取最大值i,即 1+1+...+1,i个1; dp[0] = 0转移方程 : dp[i] = min(dp[i], dp[i-j*j]+1),其中, j是平方数, j=1~k,其中k*k要保证 <= i

    意思就是:完全平方数和为i的 最小个数 等于 当前完全平方数和为i的 最大个数 与 (完全平方数和为 i - j * j 的 最小个数 + 完全平方数和为 j * j的 最小个数) 可以看到 dp[j*j] 是等于1的

    代码

    //go
    func numSquares(n int) int {
        dp := make([]int, n+1)
        for i := 1; i <= n; i++ {
            dp[i] = i
            for j := 1; i-j*j >= 0; j++ {
                dp[i] = min(dp[i], dp[i-j*j]+1)
            }
        }
        return dp[n]
    }
    
    func min(x, y int) int {
        if x < y {
            return x
        }else {
            return y
        }
    }
    

      地址:https://mp.weixin.qq.com/s/terXoH1YZgsMomv4IQIV7w

  • 相关阅读:
    【sqlite】python备份数据库
    【elasticsearch】python下的使用
    Raft
    SQL注入攻击和防御
    The world beyond batch: Streaming 101
    MillWheel: Fault-Tolerant Stream Processing at Internet Scale
    Flink DataSet API Programming Guide
    The Dataflow Model 论文
    让Storm插上CEP的翅膀
    Siddhi CEP Window机制
  • 原文地址:https://www.cnblogs.com/smallleiit/p/14047639.html
Copyright © 2011-2022 走看看