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 dp0 = 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 j*j that could be used to form i. It updates dpi to the minimum between its current value and dpi - j*j + 1.
  4. After filling the dp array, dpn 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];
}
相关推荐
橘和柠20 分钟前
知识图谱实战(一):数据采集与实体关系抽取(完整代码)
算法
Mem0rin32 分钟前
前缀和:中心下标与数组乘积
数据结构·算法
windliang33 分钟前
Claude Code 源码分析(八):Memory 如何被写入、整理与按需召回
前端·算法·面试
漂流瓶jz37 分钟前
UVA-12174 Shuffle的播放记录 题解答案代码 算法竞赛入门经典第二版
数据结构·c++·算法·图论·滑动窗口·算法竞赛入门经典·uva
Forever Nore39 分钟前
LeetCode 6 Z 字形变换 - 按行模拟
算法·leetcode
Darkwanderor1 小时前
线程概念和Linux线程
linux·c语言·c++
clear sky .1 小时前
[freertos源码阅读]task.c任务篇
c语言·开发语言
fkyyly1 小时前
hermes解读
算法·code_agent
Darkwanderor2 小时前
Linux线程控制
linux·c语言·c++
过期的秋刀鱼!2 小时前
使用都热编码的分类特征
人工智能·算法·决策树·机器学习·分类·数据挖掘