1. 程式人生 > 其它 >#力扣 LeetCode367. 有效的完全平方數 #在所有 Java 提交中擊敗了 100.00% 的使用者 @FDDLC

#力扣 LeetCode367. 有效的完全平方數 #在所有 Java 提交中擊敗了 100.00% 的使用者 @FDDLC

技術標籤:演算法&資料結構

題目描述:

367. 有效的完全平方數 - 力扣(LeetCode) (leetcode-cn.com)

Java程式碼一:

class Solution { //給定一個正整數 num
    public boolean isPerfectSquare(int num) {
        for(long root=1;;root++){
            if(root*root==num)return true;
            else if(root*root>num)break;
        }
        return false;
    }
}

Java程式碼二:二分法

class Solution { //給定一個正整數 num
    public boolean isPerfectSquare(int num) {
        long low=1,high=num,mid,mid2;
        while(low<=high){ //要取等號
            mid=(low+high)/2;
            mid2=mid*mid;
            if(mid2>num)high=mid-1;
            else if(mid2<num)low=mid+1;
            else return true; //mid2==num
        }
        return false;
    }
}

Java程式碼三:1+3+5+…+(2n-1)=n^2

class Solution { //給定一個正整數 num
    public boolean isPerfectSquare(int num) { 1+3+5+…+(2n-1)=n^2
        long n=1,sum=1;
        for(;sum<num;n++,sum+=2*n-1);
        return num==n*n;
    }
}

Java程式碼四:同上

class Solution { //給定一個正整數 num
    public boolean isPerfectSquare(int num) { 1+3+5+…+(2n-1)=n^2
        long an=1,sum=1;
        for(;sum<num;an+=2,sum+=an);
        return num==(an=(an+1)/2)*an;
    }
}

Java程式碼五:同上

class Solution { //給定一個正整數 num
    public boolean isPerfectSquare(int num) { 1+3+5+…+(2n-1)=n^2
        for(int an=1;num>0;num-=an,an+=2);
        return num==0;
    }
}