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++
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public: | |
bool isPerfectSquare(int num) { | |
long x = num; | |
while(x * x > num) { | |
x = (x + num / x) >> 1; | |
} | |
return x * x == num; | |
} | |
}; |
用二分法也可以
kotlin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} | |
} |
沒有留言:
張貼留言