[Leetcode /バイナリ]有効な完全な方形(スクイーズ半分)

問題の説明:

正の整数を考えるとNUM場合、関数を書くnumは完璧な正方形である、そしてそれ以外の場合はFALSE、TRUEを返します。

注: DOは任意の組み込みのようなライブラリ関数を使用していません  sqrt

例1:

入力: 16
 出力:

例2:

入力: 14
 出力:

基本的な考え方:

使用して、半分スクイーズアイデアを。

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で、そして長い長いよう変更することができる場合

公開された137元の記事 ウォン称賛19 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_43338695/article/details/102803859