原题链接:
https://leetcode.cn/problems/sum-of-square-numbers/
解题思路:
-
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
}
网友评论