633.平方数之和

题目

给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 + b^2 = c 。

示例 1:
输入:c = 5
输出:true
解释:1 * 1 + 2 * 2 = 5

示例 2:
输入:c = 3
输出:false

示例 3:
输入:c = 4
输出:true
解释:0 * 0 + 2 * 2 = 4

示例 4:
输入:c = 2
输出:true
解释:1 * 1 + 1 * 1= 2

示例 5:
输入:c = 1
输出:true
解释:0 * 0 + 1 * 1 = 1

提示: 0 <= c <= 2^31 - 1

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sum-of-square-numbers 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

知识点

Math.sqrt() 函数返回一个数的平方根; Math.floor() 返回小于或等于一个给定数字的最大整数。可以理解 Math.floor()为向下取整; Math.ceil() 函数返回大于或等于一个给定数字的最小整数。

//Math.sqrt()
Math.sqrt(9); //3
Math.sqrt(4); //2
Math.sqrt(9.3); //3.0495901363953815
Math.sqrt(3);//1.7320508075688772

Math.floor(1.7); //1
Math.floor(2.1); //2
Math.ceil(1.7); //2
Math.ceil(2.1); //3

JS实现

/**
 * @param {number} c
 * @return {boolean}
 */
var judgeSquareSum = function (c) {
  let left = 0;
  let right = Math.floor(Math.sqrt(c));

  while (left <= right) {
    const sum = left * left + right * right;
    if (sum === c) {
      return true;
    } else if (sum > c) {
      right--;
    } else {
      left++;
    }
  }
  return false;
};