LEET-CODE_2. 两数平方和

  1. Sum of Square Numbers (Easy)

Leetcode / 力扣
题目描述:判断一个非负整数是否为两个整数的平方和。

给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c。
示例1:

输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5

示例2:

输入: 3
输出: False

方法一:使用 sqrt 函数
 /**
     * 使用 sqrt 函数
     * @param c
     * @return
     */
    public boolean judgeSquareSum4(int c){
        for (int a = 0;a*a < c;a++){
            double b = Math.sqrt(c - a*a);
            if (b == (int)b){
                return true;
            }
        }
        return false;
    }
方法一:二分查找

 public boolean judgeSquareSum(int c) {
        // 根据条件,有 b = c- a*a
        //循环迭代a,因为 (a*a) 所以只需要找出 b 能否开方出正整数
        for (long a = 0; a * a <= c; a++) {
            int b = c - (int)(a * a);
            //二分法查找b能否开方出正整数
            if (binary_search(0, b, b)) {
                return true;
            }
        }
        return false;
    }
    //双指针 左指针从0开始,
    public boolean binary_search(long s, long e, int n) {
        //如果 左指针大于右指针证明n无正整数方根
        if (s > e) {
            return false;
        }
        //查找指针中间值
        long mid = s + (e - s) / 2;
        //如果min *min = n ,则 n 的开方等于 min,返回ture
        if (mid * mid == n){
            return true;
        }
        //如果mid * mid > n,则移动左指针(减小中间值),再次二分法找中间值的,计算min是否是n的二元平方根
        if (mid * mid > n){
            return binary_search(s, mid - 1, n);
        }
    //如果mid * mid < n,则移动右指针(增大中间值),再次二分法找中间值的,计算是min否是n的二元平方根
        return binary_search(mid + 1, e, n);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,429评论 0 2
  • 简述 极客时间算法40讲中所出现的leetcode算法题 题目 【链表】reverse-linked-list(反...
    BestbpF阅读 4,509评论 0 4
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,894评论 2 9
  • 目前使用的是python2,以后有其他学习计划再更新其他语音的代码。 一般情况下,顺序为英文原题——中文翻译——代...
    阿喆_399a阅读 833评论 0 0
  • 知识点: 注:int类型默认32位有大小范围 且第一位为符号位 0 为正 1 为负 8.4作业 A:1、风力预警系...
    cGunsNRoses阅读 1,125评论 0 0