【Leetcode_easy】633. Sum of Square Numbers
problem
题意:
solution1:
可以从c的平方根,注意即使c不是平方数,也会返回一个整型数。然后我们判断如果 i*i 等于c,说明c就是个平方数,只要再凑个0,就是两个平方数之和,返回 true;如果不等于的话,那么算出差值 c - i*i,如果这个差值也是平方数的话,返回 true。遍历结束后返回 false,
class Solution { public: bool judgeSquareSum(int c) { for(int i=sqrt(c); i>=0; --i) { if(i*i == c) return true; int d = c - i*i, t = sqrt(d); if(t*t == d) return true; } return false; } };
solution2:
使用hash set遍历保存至平方根的所有数值的平方,判断是否余值存在即可;
疑问:保存的时候同时进行判断,那么需要判断的余值确定已经在set里了嘛?
class Solution { public: bool judgeSquareSum(int c) { unordered_set<int> sq;//err. //for(int i=sqrt(c); i>=0; --i)//or... for(int i=0; i<=sqrt(c); ++i) { sq.insert(i*i); if(sq.count(c-i*i)) return true; } return false; } };
solution3:左右向中间求解,类似于二分法;
疑问:不知道为什么必须使用long类型,否则出错!
class Solution { public: bool judgeSquareSum(int c) { long left = 0, right = sqrt(c);//err. while(left<=right) { if(left*left + right*right == c) return true;// else if(left*left+right*right<c) ++left; else --right; } return false; } };
solution4:
费马平方和定理 Fermat's theorem on sums of two squares 的一般推广形式:当某个数字的 4k+3 型的质数因子的个数均为偶数时,其可以拆分为两个平方数之和(each prime that is congruent to 3 mod 4 appears with an even exponent in the prime factorization of the number)。那么我们只要统计其质数因子的个数,并且判读,若其为 4k+3 型且出现次数为奇数的话直接返回 false。
参考
1. Leetcode_easy_633. Sum of Square Numbers;
2. Grandyang;
完
各美其美,美美与共,不和他人作比较,不对他人有期待,不批判他人,不钻牛角尖。
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】