> 文章列表 > LeetCode题解:633. 平方数之和,双指针,JavaScript,详细注释

LeetCode题解:633. 平方数之和,双指针,JavaScript,详细注释

LeetCode题解:633. 平方数之和,双指针,JavaScript,详细注释

原题链接:
https://leetcode.cn/problems/sum-of-square-numbers/

解题思路:

  1. ab一定是000c\\sqrt cc之间的某个值。
  2. a的初始值设为0b的初始值设为c\\sqrt ccb必须为整数
  3. ab向中间逼近,查找满足条件的值。
  4. 由于ab是可以交换的,两者相遇时,就查找了所有可能的值。
  5. a2+b2>ca^2+b^2>ca2+b2>c时,b--
  6. 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
}