zoukankan      html  css  js  c++  java
  • 每周一题:平方数之和((更新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
    };

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

  • 相关阅读:
    Mysql Explain 详解【转】
    Windows下Gradle安装与配置
    MYSQ创建联合索引,字段的先后顺序,对查询的影响分析
    给.Net 5 Api增加JwtBearer认证
    纸壳CMS 3.3.6发布升级.Net 5
    PL/SQL Developer登入时候报ORA-12638: 身份证明检索失败的解决办法
    Mybatis 日志工厂
    Mybatis 配置解析
    Mybatis 完成增删改查
    Mybatis 简介
  • 原文地址:https://www.cnblogs.com/sayg-1207/p/13536514.html
Copyright © 2011-2022 走看看