Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
leetcode今日题目第633题-平方数之和
一、题目描述
给定一个非负整数c
,你要判断是否存在两个整数 a
和 b
,使得 a2 + b2 = c
。
示例 1:
输入:c = 5
输出:true
解释:1 * 1 + 2 * 2 = 5
示例 2:
输入:c = 3
输出:false
二、思路分析
双指针法
a2 + b2 = c
,可知a、b
的取值范围为[0, sqrt(c)]
;
因为b2 = c - a2
,可知随着a
的增大,b
递减,二者变化方向相反,因此考虑双指针法;
左指针起始位置a = 0
,右指针起始位置b = Math.floor(Math.sqrt(c))
;
计算a2 + b2
的值;
大于c
,右指针左移;
小于c
,左指针右移;
等于c
返回true
;
没有上述情况返回,查找失败,false。
三、JavaScript 代码
var judgeSquareSum = function(c) {
let a = 0, b = Math.floor(Math.sqrt(c));
while(a <= b) {
if ((a*a + b*b) === c) return true;
if((a*a + b*b) < c) a++;
if((a*a + b*b) > c) b--;
}
return false;
};
四、总结
本题目就是一个很典型的对双指针运用的例子,采用两端向中间靠拢,按照满足的条件来决定指针左移还是右移,依次查找,知道满足条件或者所有条件都不满足,知道查找失败。
五、最后
我是朽木白,一个热爱分享的程序猿。如果觉得本文还不错,记得点赞+关注❤️