問題の説明:
正の整数を考えると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で、そして長い長いよう変更することができる場合