LeetCode //C - 279. Perfect Squares

279. Perfect Squares

Given an integer n, return the least number of perfect square numbers that sum to n.

A perfect square is an integer that is the square of an integer; in other words, it is the product of some integer with itself. For example, 1, 4, 9, and 16 are perfect squares while 3 and 11 are not.

Example 1:

Input: n = 12
Output: 3
Explanation: 12 = 4 + 4 + 4.

Example 2:

Input: n = 13
Output: 2
Explanation: 13 = 4 + 9.

Constraints:
  • 1 < = n < = 1 0 4 1 <= n <= 10^4 1<=n<=104

From: LeetCode

Link: 279. Perfect Squares


Solution:

Ideas:
  1. Initialize an array dp with size n+1 and fill it with INT_MAX to represent infinity, since we are looking for the minimum value. This array will store the least number of perfect squares that sum to every number up to n.
  2. Set dp[0] = 0 because there are 0 perfect squares that sum to 0.
  3. Use nested loops to populate the dp array. The outer loop iterates through each number from 1 to n, and the inner loop iterates through each square number jj that could be used to form i. It updates dp[i] to the minimum between its current value and dp[i - jj] + 1.
  4. After filling the dp array, dp[n] contains the least number of perfect squares that sum to n.
Code:
c 复制代码
int numSquares(int n) {
    int dp[n+1];
    for(int i = 0; i <= n; i++) {
        dp[i] = INT_MAX;
    }
    dp[0] = 0;
    
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j*j <= i; j++) {
            if(dp[i - j*j] != INT_MAX) {
                dp[i] = dp[i] < dp[i - j*j] + 1 ? dp[i] : dp[i - j*j] + 1;
            }
        }
    }
    
    return dp[n];
}
相关推荐
_深海凉_22 分钟前
LeetCode热题100-有效的括号
linux·算法·leetcode
零号全栈寒江独钓3 小时前
基于c/c++实现linux/windows跨平台获取ntp网络时间戳
linux·c语言·c++·windows
被开发耽误的大厨3 小时前
1、==、equals、hashCode底层原理?重写场景?
算法·哈希算法
WolfGang0073213 小时前
代码随想录算法训练营 Day38 | 动态规划 part11
算法·动态规划
松☆4 小时前
C++ 算法竞赛题解:P13569 [CCPC 2024 重庆站] osu!mania —— 浮点数精度陷阱与 `eps` 的深度解析
开发语言·c++·算法
爱编码的小八嘎5 小时前
C语言完美演绎8-10
c语言
jr-create(•̀⌄•́)5 小时前
正则化和优化算法区别
pytorch·深度学习·神经网络·算法
li星野6 小时前
刷题:数组
数据结构·算法
tankeven6 小时前
HJ182 画展布置
c++·算法
爱编码的小八嘎8 小时前
C语言完美演绎8-4
c语言