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];
}
相关推荐
圣保罗的大教堂1 天前
leetcode 3867. 数对的最大公约数之和 中等
leetcode
To_OC1 天前
LC 15 三数之和:双指针不难,难的是把去重做对
javascript·算法·leetcode
renhongxia11 天前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
G.O.G.O.G1 天前
LeetCode SQL 从入门到精通(MySQL)06(上)
数据库·sql·mysql·leetcode
zephyr051 天前
动态规划-最长上升子序列问题
算法·动态规划
闪电悠米1 天前
力扣hot100-56.合并区间-排序详解
数据结构·算法·leetcode·贪心算法·排序算法
openKylin1 天前
与全球技术演进同频,openKylin 3.0从C迈向Rust
c语言·开发语言·rust·开源·开放原子·openkylin
迷茫、Peanut1 天前
C语言sizeof和strlen
c语言
卡提西亚1 天前
leetcode-1438. 绝对差不超过限制的最长连续子数组
算法·leetcode·职场和发展
Java面试题总结1 天前
LeetCode 93.复原IP地址
算法·leetcode·职场和发展·.net