LeetCode题解:633. 平方数之和,双指针,JavaScript,详细注释
原题链接:
https://leetcode.cn/problems/sum-of-square-numbers/
解题思路:
a
和b
一定是000到c\\sqrt cc之间的某个值。- 将
a
的初始值设为0
。b
的初始值设为c\\sqrt cc,b
必须为整数。 a
和b
向中间逼近,查找满足条件的值。- 由于
a
和b
是可以交换的,两者相遇时,就查找了所有可能的值。 - a2+b2>ca^2+b^2>ca2+b2>c时,
b--
。 - a2+b2<ca^2+b^2<ca2+b2<c时,
a++
。
/*** @param {number} c* @return {boolean}*/
var judgeSquareSum = function (c) {let a = 0 // a从最小值开始查找let b = Math.floor(Math.sqrt(c)) // b从最大值开始查找,需要保证初始值是整数// a和b可交换,因此只要搜索到两者相遇即可while (a <= b) {// 计算当前的a^2 + b^2值let curr = a ** 2 + b ** 2// 如果curr等于c,表示找到相应整数if (curr === c) {return true}// 如果curr大于c,减小b,向目标值逼近else if (curr > c) {b--}// 如果curr小于c,增大a,向目标值逼近else {a++}}// 如果退出循环,表示未找到a和breturn false
}