Skip to content

Latest commit

 

History

History

279 - Perfect Squares

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

279. Perfect Squares share

Problem Statement

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 <= 104

Solutions

use std::cmp::min;

impl Solution {
    pub fn num_squares(n: i32) -> i32 {
        // make a dp array of size n + 1 and filled with 0
        let mut dp = vec![n; n as usize + 1];

        // set the first element to 0
        dp[0] = 0;

        // iterate from 1 to n
        for i in 1..=n as usize {
            // iterate from 1 to sqrt(i)
            for j in 1..=(i as f64).sqrt() as usize {
                // set dp[i] to the minimum of dp[i] and dp[i - j * j] + 1
                dp[i] = min(dp[i], dp[i - j * j] + 1);
            }
        }

        dp[n as usize]
    }
}