Leetcodeの効果的な完全な平方数C ++

効果的な完全な正方形

正の整数numを指定して関数を記述します。numが完全な平方数の場合はTrueを返し、それ以外の場合はFalseを返します。

注:sqrtなどの組み込みライブラリ関数は使用しないでください。

例1:

输入:16
输出:True

例2:

输入:14
输出:False

解決策1:増分判断

public:
    bool isPerfectSquare(int num) {
        int i=1;
        long n=i*i;
        while(n<=num)
        {
            if(n==num)
                return true;
            else 
            {
                i++;
                n=pow(i,2);
            }
        }
        return false;
    }
};

解決策2:二分法

class Solution {
public:
    bool isPerfectSquare(int num) {
        int start=1;
        int end=num;
        int mid=start+(end-start)/2;
        while(start<=end)
        {
            if(pow(mid,2)>num)
            {
                end=mid-1;
            }
            else if(pow(mid,2)<num)
            {
                start=mid+1;
            }
            else return true;
            mid=(end-start)/2+start;
        }
        return false;
    }
};

ソリューション3:フォーミュラメソッド

1 + 3 + 5 + 7 + 9 +…+(2n-1)= n ^ 2を使用します。つまり、完全な平方数は最初のn個の連続する奇数の合計でなければなりません

class Solution {
public:
    bool isPerfectSquare(int num) {
        int i=1;
        while(num>0)
        {
            num-=i;
            i+=2;
        }
        return num==0;
    }
};

おすすめ

転載: blog.csdn.net/weixin_39139505/article/details/90144847