Perfect Squares

406 篇文章 0 订阅
406 篇文章 0 订阅

1,题目要求

Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, …) which sum to n.

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

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

给定正整数n,找到总和为n的最小正方数(例如,1,4,9,16 …)。

2,题目思路

对于这道题,题目要求的是给定一个数字,找到让平方数字之和等于它的最小的数字个数之和。

如果转化为即几何问题,那么就是给定一块区域,如何防止最少的正方向,将其填满。

对于这个问题,我们可以使用递归的策略来对最小的举行情况进行检测。

在进行检索的过程中还有一点值得注意的是,因为边长为1的矩形也是满足情况的,因此,对于给定的数字n,那么最极端的情况就是利用边长为1的矩形将其填满。因此,当矩形的个数达到n时,说明在极端情况下,实现了问题的要求。

3,代码实现

static auto speedup = [](){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    return nullptr;
}();

class Solution {
public:
    int numSquares(int n) {
        static vector<int> res {0};	//用于对全为1的情况下的判断
        if(res.size() > n)
            return res[n];      
        int minSquare = INT_MAX;
        for(int i = 1;(i*i) <= n;i++)
            minSquare = min(minSquare, 1 + numSquares(n - i*i));	//递归地寻找所需要的最少的矩形个数
        res.push_back(minSquare);	
        return minSquare;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值