原题链接: leetcode.cn/problems/su…
解题思路:
a和b一定是到之间的某个值。- 将
a的初始值设为0。b的初始值设为,b必须为整数。 a和b向中间逼近,查找满足条件的值。- 由于
a和b是可以交换的,两者相遇时,就查找了所有可能的值。 - 时,
b--。 - 时,
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和b
return false
}