每周一题:平方数之和((更新JS)

题目:

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

这里是将一些步骤进行了合并,简化了代码。但是执行效率好像还变低了。

posted on 2020-08-23 21:31  沈卢  阅读(254)  评论(0编辑  收藏  举报

导航