【leetcode/二分】有效的完全平方數(夾逼二分)

問題描述:

給定一個正整數 num,編寫一個函數,如果 num 是一個完全平方數,則返回 True,否則返回 False。

說明:不要使用任何內置的庫函數,如  sqrt

示例 1:

輸入:16
輸出:True

示例 2:

輸入:14
輸出:False

基本思路:

使用夾逼二分的思路。

AC代碼:

class Solution {
public:
    bool isPerfectSquare(int num) {
      int left = 1, right = num;
      while (left < right) {
        int mid = left + (right - left) / 2;
        if (mid < num / mid) left = mid + 1;
        else right = mid;
      }
      // 注意left*left會溢出
      return long(left) * long(left) == long(num)? true : false;
    }
};

其它經驗:

 注意如果使用乘法很容易造成溢出。如果原來是int,可以換爲long long

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章