美文网首页JavaScript
LeetCode题解:633. 平方数之和,双指针,JavaSc

LeetCode题解:633. 平方数之和,双指针,JavaSc

作者: Lee_Chen | 来源:发表于2023-02-23 13:16 被阅读0次

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

    解题思路:

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

    相关文章

      网友评论

        本文标题:LeetCode题解:633. 平方数之和,双指针,JavaSc

        本文链接:https://www.haomeiwen.com/subject/yttzkdtx.html