题目:
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a²+b²=c。
示例1:
输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5
示例2:
输入: 3
输出: False
代码:
var judgeSquareSum = function(c) {
let square = Math.sqrt(c);
for(let i=0; i<=square; i++){
let val = c - i*i;
let num = Math.sqrt(val);
// 判断是否是整数
if(num%1 == 0){
return true;
}
}
return false;
};
通过率:
思路:
这道题我率先当一道计算题来算,a²+b²=c,设置另一个未知数d,假设c=d²,那么这个算式就转变成a²+b²=d²,所以开头我们可以使用Math.sqrt()的函数方法求出输入值的开平方根,然后建立循环;如: c = 8,2 * 2 + 2 * 2 = 8,开平方约为2.8,接着开始循环,设置临时变量i从0开始循环,i的取值范围始终小于等于c的开平方值,用c减去i²,得到一个新的数值,再通过Math.sqrt()进行开平方根,用if语句进行判断其是否为整数,假如开平方根为整数,说明存在两数平方和为 c,则返回true。如果循环完了,都不存在,就返回false
不过虽然写出来了,执行用时和内存消耗不是很让人满意。
简化之后的代码:
var judgeSquareSum = function(c) {
for(let i = 0; i * i <= c; i++){
let last = Math.sqrt(c - i * i)
if(last % 1 === 0) return true
}
return false
};
这里是将一些步骤进行了合并,简化了代码。但是执行效率好像还变低了。