LeetCode-367 有效的完全平方数

一、题目描述

给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。

说明:不要使用任何内置的库函数,如 sqrt。

示例 1:

输入:16
输出:True
示例 2:

输入:14
输出:False

二、解题思路

解法一:递增判断

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

解法二:二分查找

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 = start + (end - start) / 2;
        }
        return false;
    }

解法三:公式法


即:完全平方数是前n个连续奇数的和

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

你可能感兴趣的:(LeetCode-367 有效的完全平方数)