給予一個數字 num
,回傳 true 如果是個完全平方數,否則 false 。
完全平方是指此數是另外一個「正整數」的平方
題目是要求確認輸入的值是不是完全平方數
雖然能從 1 開始一個一個取平方直到和 num 相等為止。但是這樣太慢,能降這種線性走訪的方式就是二分搜尋了。
class Solution {
func isPerfectSquare(_ num: Int) -> Bool {
// 題目有說只會有「正數」,所以從 1 開始
var left = 1
var right = num
// 二分搜尋 binary search 為基礎的變形
while left <= right {
let middle = left + (right - left) / 2
let square = middle * middle
if square == num {
return true
} else if square < num {
left = middle + 1
} else {
right = middle - 1
}
}
return false
}
}
令 n 為數字大小
Big O | 說明 | |
---|---|---|
時間複雜度 | O(logn) | 即 binary search 的複雜度 |
空間複雜度 | O(1) | 變數宣告為常數個 |
以上,就是今天的 LeetCode in Swift ,
如果有什麼問題和回饋歡迎留言一起討論,今天就到這裡,明天見!