LintCode 完全平方数

给出一个正整数 'num,写一个函数,要求当这个当num为完全平方数时函数返回True,否则返回False。

要求不利用Sqrt函数库。

解法一:

    利用 1+3+5+7+9+…+(2n-1)=n^2,即完全平方数肯定是前n个连续奇数的和

    我们还可以发现,完全平方数的末位不含2,3,7,8.

    bool IsPerfectSquare(int num)
    {
        int temp = num % 10;
        if (!(temp == 0 || temp == 1 || temp == 4 || temp == 5 || temp == 6 || temp == 9))
            return false;
        for (int i = 1; num > 0; i += 2)
        {
            num -= i;
        }
        if (num == 0)
            return true;
        return false;
    }

解法二

    利用二分法求解

    bool IsPerfectSquare2(int num)
    {
        if (num == 1) return true;
        int start = 0;
        int end = num/2;
        while (start <= end)
        {
            //int 范围不够
            long temp = (start + end) / 2;
            if (temp * temp == num)
            {
                return true;
            }
            if (temp * temp > num)
            {
                if (end == temp)
                {
                    //如果不返回会死循环,
                    return false;
                }
                end = (int)temp;
            }
            else
            {
                if (start == temp)
                {
                    return false;
                }
                start = (int)temp;
            }
        }
        return false;
    }

猜你喜欢

转载自blog.csdn.net/wenbooboo/article/details/80773135