首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    完全平方

    给定正整数 n,找到若干个完全平方(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方的个数最少。...队列的这种写法也是很有趣Queue queue = new LinkedList(); 对于这个问题建模: 整个问题转化为一个图论问题,从n到0,每个数字表示一个节点,如果有两个数字x到y相差一个完全平方...四平方定理: 任何一个正整数都可以表示成不超过四个整数的平方之和。 满足四平方和定理的n(这里要满足由四个构成,小于四个不行), 必定满足 n=4a(8b+7) 或者使用动态规划。...下面我们来用bfs解题,以n=13为例,请看下图13开始,第一遍:距离1X1可以到12节点,距离2X2可以到9节点,距离3X3可以到4节点,距离4X4超过13了肯定到不了0节点;第二遍将跨过jXj完全平方能到达的点加入已清空的队列...,再广度遍历,遍历到9节点时,发现有距离是完全平方3X3可以到达0节点。

    42310

    LeetCode 633.平方之和

    平方之和[1] 描述 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 解题思路 判断 c 是否为非负整数,若是,则直接返回 false 利用 Math 包中...sqrt()方法求出小于 c 的平方根的最大整数作为右指针,同时设置左指针从 0 开始; 开始循环,若左指针小于右指针,判断两指针之和与 c 的大小; 若和等于 c,返回 false; 若和小于 c,...* Project : LeetCode * Package : PACKAGE_NAME * Class : SixHundredThirtThree * Desc : 633.平方之和...,并将其强制转换为不大于平方根值的最大整数 int flag = (int) Math.sqrt(c); int i = 0; while (i <= flag){ if ((i*i...平方之和: https://leetcode-cn.com/problems/sum-of-square-numbers/

    38510

    力扣279——完全平方

    原题 给定正整数 n,找到若干个完全平方(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方的个数最少。...优化的话,自然就是先算最大的,也就是离 n 最近的且比它小的平方数了。 编码的时候需要注意,一般我们使用队列实现广度优先搜索,因为它是先进先出。...接下来我们来看看代码: import java.util.*; class Solution { public int numSquares(int n) { // 利用队列实现广度优先搜索...动态转移方程为:dp[i] = MIN(dp[i], dp[i - j * j] + 1),i表示当前数字,j*j表示平方 这个思路相当于求出了从1到n所有数字的最小平方的个数。...关键在于第4点,也就是后面的计算可以依赖于前面求出的结果,每一个都找出其所有基于以前求过的,加上1个完全平方后,最小的的平方的个数。

    48520

    【超直白】leetcode 279 完全平方

    题目描述 给定正整数 n,找到若干个完全平方(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方的个数最少。...先来看第一种很高效的方法,根据四平方和定理,任意一个正整数均可表示为4个整数的平方和,其实是可以表示为4个以内的平方之和,那么就是说返回结果只有1,2,3或4其中的一个,首先我们将数字化简一下,由于一个如果含有因子...还有一个可以化简的地方就是,如果一个除以8余7的话,那么肯定是由4个完全平方数组成,这里就不证明了,因为我也不会证明,读者可自行举例验证。...那么做完两步后,一个很大的有可能就会变得很小了,大大减少了运算时间,下面我们就来尝试的将其拆为两个平方之和,如果拆成功了那么就会返回1或2,因为其中一个平方可能为0....我们的目的是遍历所有比n小的完全平方,然后对n与完全平方的差值递归调用函数,目的是不断的更新最终结果,直到找到最小的那个,代码如下: class Solution { public: int

    11310

    C语言刷题随记 —— 完全平方

    题目描述 一个整数,它加上 100 后是一个完全平方,再加上 168 又是一个完全平方,请问该是多少? 2....程序分析 在 10 万以内判断(可以是比100000大的数字),先将该加上 100 后再开方,再将该加上 268 后再开方,如果开方后的结果满足如下条件,即是结果。...思路 遍历10万以内的数字,将每个数字分别加上 100 和 168后开平方,最后计算加上100 和 168 后的两平方,如果一个平方根的平方等于该,这说明此是完全平方。...后开方后的结果*/ y=sqrt(i+268); /*y 为再加上 168 后开方后的结果*/ if(x*x==i+100&&y*y==i+268) /*如果一个平方根的平方等于该...,这说明此是完全平方*/ printf("\n%ld\n",i); } return 0; }

    26910
    领券