LeetCode 367: isValidSquare 是否是完全平方数 (Java)

元胞珊瑚
• 阅读 7997

题目:给一个正整数,判断它是不是完全平方数。


解法:

  1. 二分法。给的是int型的正整数,所以下界是1,上界是最大正整数Integer.MAX_VALUE的平方根。但要注意一定要用乘法来判断相等时的情况。下面是代码:

  public static int mySqrt(int x) {
        if(x == 0) return 0;
        int left = 1, right = Integer.MAX_VALUE;
        while(true){
            int mid = left + (right-left)/2;
            if(mid > x/mid)
                right=mid-1;
            else{
                if(mid+1>x/(mid+1))
                    return (int)mid;
                left=mid+1;
            }
        }
    }
    
    public static boolean isPerfectSquare(int num) {
        if(num == 0) return true;
        int left = 1, right = mySqrt(Integer.MAX_VALUE);
        while(right >= left){
            int mid = left + (right-left)/2;
            if(mid*mid == num)
                return true;
            else if(mid*mid > num)
                right = mid - 1;
            else
                left = mid + 1;
        }
        return false;
    }

2.数学技巧:所有的完全平方数都可以被表示成奇数和1+3+5+7+9 ...。

public boolean isPerfectSquare(int num) {
     int i = 1;
     while (num > 0) {
         num -= i;
         i += 2;
     }
     return num == 0;
 }
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
5年前
用Python编程语言来实现阿姆斯特朗数的检查
一、什么是阿姆斯特朗数?如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。一个正整数称为阿姆斯特朗阶数。例:abcd...anbncndn...如果是3位的阿姆斯特朗数字,则每个数字的立方和等于该数字本身。例如:153111555333//153是一个阿姆斯特朗
DaLongggggg DaLongggggg
4年前
python刷题-进制转换
十六进制转八进制问题描述  给定n个十六进制正整数,输出它们对应的八进制数。输入格式  输入的第一行为一个正整数n(1<n<10)。  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式  输出n行,每行为输入对应的八进制正整数。  【注意】  输入的十六进制数不会有
Karen110 Karen110
4年前
用Python编程语言来实现阿姆斯特朗数的检查
一、什么是阿姆斯特朗数?如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。一个正整数称为阿姆斯特朗阶数。例:abcd...anbncndn...如果是3位的阿姆斯特朗数字,则每个数字的立方和等于该数字本身。例如:153111555333//153是一个阿姆斯特朗数。二、案
执键写春秋 执键写春秋
4年前
Java练习(二)——寻找一个加100为完全平方,再加168还是完全平方的数
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(该数小于100)【提示:如果一个整数是另外一个整数的平方,那么该数被称为完全平方数。】packagetest;publicclassPratice2publicstaticvoidmain(Stringargs)//TODOAu
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
4年前
279. 完全平方数 leetcode JAVA
题目:给定正整数 _n_,找到若干个完全平方数(比如 1,4,9,16,...)使得它们的和等于_n_。你需要让组成和的完全平方数的个数最少。示例 1:输入:_n_12输出:3解释:12444.示例2:输入:_n_13输出:2解释:134
Stella981 Stella981
4年前
Python_每日习题_0003_完全平方数
题目一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?程序分析因为168对于指数爆炸来说实在太小了,所以可以直接省略数学分析,用最朴素的方法来获取上限:n0while(n1)2nn<168:n1
达里尔 达里尔
2年前
给数组添加新数据,判断数据是否重复
多选要进行数组拼接,希望判断往原数组里添的新数据是否重复,封装个简易方法languageconstdataArrayname:'aaa',id:1,name:'bbb',id:2;constnewDataname:'ccc',id:2;//要添加的新数