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];
}
相关推荐
做运维的阿瑞10 小时前
多表查询基础:INNER JOIN、LEFT JOIN、RIGHT JOIN
数据库·sql·mysql·算法
大侠归来11 小时前
C语言素数判断:从入门到进阶
java·c语言·算法
v:PLLucky2011 小时前
农作物病虫害检测识别系统
深度学习·scrapy·算法·百度·微信公众平台
朝朝辞暮i11 小时前
C++ 第一阶段总结:从零基础到 ROS2 前置语法
开发语言·c++·算法
H.莓飛11 小时前
【数据结构】链表_OJ题
linux·数据结构·算法·链表
All for pursuit.12 小时前
【回溯-4】46.全排列
数据结构·c++·算法·leetcode
小鱼~~12 小时前
Recall@K、Precision@K、MRR、nDCG@K简介
人工智能·算法·机器学习
在所不辞兄12 小时前
【零基础学智能仿真-38】从规则矩形到带孔薄板:Gmsh 网格与 FEniCSx 联合求解
人工智能·深度学习·算法·机器学习·工程仿真
大圣编蚕12 小时前
C语言核心知识复习:预处理、头文件、强制类型转换、错误处理、递归与内存管理
c语言·开发语言
anew___12 小时前
《从零手写操作系统 (21):用户态C运行时——从裸ELF到printf》
linux·服务器·c语言