本文主要是介绍LCP 633 平方数之和 [leetcode - 8],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近是在研究双指针啊,leetcode刷的题都是这方面的。都记录在最近的文章里,大家有兴趣可以去我主页看看
LCP633 平方数之和
给定一个非负整数 c
,你要判断是否存在两个整数 a
和 b
,使得 a2 + b2 = c
。
示例 1:
输入:c = 5
输出:true
解释:1 * 1 + 2 * 2 = 5
方法1:食我双指针啊
显然,这里是在给定范围内找找两个数字满足条件,双指针再合适不过了
//leetcode官方题解
class Solution {
public:bool judgeSquareSum(int c) {long left = 0;long right = (int)sqrt(c);while (left <= right) {long sum = left * left + right * right;if (sum == c) {return true;} else if (sum > c) {right--;} else {left++;}}return false;}
};
这个方法是leetcode官方题解,效果如下
方法二,直接判断不挺好
class Solution {
public:bool judgeSquareSum(int c) {//对于单独情况,分个if就行,不然对所有情况编程,徒增开销if (c == 0) return true;//这里还有一种写法,不过每次都要多加一次计算,性能较差/*for(int a=1;a*a<=c;a++)大家对比一下,是否多了一次计算?每个循环中多一次计算,这个对效率的拖后腿是不能多想*/int sqc = (int)(sqrt(c));for (int a = 1; a <= sqc; a++){int b = (int)(sqrt(c - a * a));if (a * a + b * b == c) return true;}return false;}
};
这是俺的直接循环比较法
这篇关于LCP 633 平方数之和 [leetcode - 8]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!