2017年12月15日 星期五

[LeetCode] 367. Valid Perfect Square

轉自LeetCode

Given a positive integer num, write a function which returns True if num is a perfect square else False.
Note: Do not use any built-in library function such as sqrt.
Example 1:
Input: 16
Returns: True
Example 2:
Input: 14
Returns: False
<Solution>

因為題目有要求不能用 sqrt 來算,這時候就只能用牛頓法來算

code 如下

C++
class Solution {
public:
bool isPerfectSquare(int num) {
long x = num;
while(x * x > num) {
x = (x + num / x) >> 1;
}
return x * x == num;
}
};

用二分法也可以

kotlin

class Solution {
fun isPerfectSquare(num: Int): Boolean {
val longNum = num.toLong()
var left = 0L
var right = longNum
while(left <= right) {
var mid = left + (right - left) / 2L
var t = mid * mid
when {
t == longNum -> return true
t < longNum -> left = mid + 1
else -> right = mid - 1
}
}
return false
}
}

沒有留言:

張貼留言