题目
给定一个非负整数 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;
};