LeetCode-279.完全平方数

84 阅读1分钟

279.完全平方数

题目描述

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,14916 都是完全平方数,而 311 不是。

示例

 输入: n = 12
 输出: 3 
 解释: 12 = 4 + 4 + 4

思路:

动态规划:

dp[i] 表示整数i最少的完全平方数

选的数字肯定都是在(0-\sqrt{i})

列举数字j,那么

状态转移方程: dp[i]=1+MIN(dp[i-j*j]) j从1到根号i

代码展示(c++)

 class Solution {
 public:
     //279.完全平方数
     int numSquares(int n) {
         vector<int> dp(n + 1,0);
         for (int i = 1; i <= n; i++) {
             int min_ = INT_MAX;
             for (int j = 1; j*j <= i; j++) {
                 min_=min(dp[i-j*j],min_);
             }
             dp[i] = min_+1;
         }
         return dp[n];
     }
 };