LeetCode?題解?Swift?有效的完全平方數(shù)
題目
給定一個 正整數(shù) num,編寫一個函數(shù),如果 num 是一個完全平方數(shù),則返回 true,否則返回 false。
進階:不要 使用任何內(nèi)置的庫函數(shù),如 sqrt。
示例 1:
輸入: num = 16
輸出: true
示例 2:
輸入: num = 14
輸出: false
方法一:使用內(nèi)置的庫函數(shù)
思路及解法
根據(jù)完全平方數(shù)的性質(zhì),我們只需要直接判斷 num\textit{num}num 的平方根 xxx 是否為整數(shù)即可。對于不能判斷浮點數(shù)的值是否等于整數(shù)的語言,則可以通過以下規(guī)則判斷:

class Solution {
func isPerfectSquare(_ num: Int) -> Bool {
let x: Int = Int(sqrt(Double(num)))
return x * x == num
}
}
復(fù)雜度分析
代碼中使用的 pow 函數(shù)的時空復(fù)雜度與 CPU 支持的指令集相關(guān),這里不深入分析。
方法二:暴力
思路及解法

代碼
class Solution {
func isPerfectSquare(_ num: Int) -> Bool {
var x: Int = 1
var square: Int = 1
while square <= num {
if square == num {
return true
}
x += 1
square = x * x
}
return false
}
}
復(fù)雜度分析

方法三:二分查找
思路及解法

細(xì)節(jié)

代碼
class Solution {
func isPerfectSquare(_ num: Int) -> Bool {
var left: Int = 0
var right: Int = num
while left <= right {
let mid = (right - left) / 2 + left
let square = mid * mid
if square < num {
left = mid + 1
} else if square > num {
right = mid - 1
} else {
return true
}
}
return false
}
}
復(fù)雜度分析
- 時間復(fù)雜度:O(log?n),其中 n為正整數(shù) num 的最大值。
- 空間復(fù)雜度:O(1)。
以上就是LeetCode 題解 Swift 有效的完全平方數(shù)的詳細(xì)內(nèi)容,更多關(guān)于Swift 有效完全平方數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Swift在什么情況會發(fā)生內(nèi)存訪問沖突詳解
這篇文章主要給大家介紹了關(guān)于Swift在什么情況會發(fā)生內(nèi)存訪問沖突的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Swift內(nèi)置的數(shù)字類型及基本的轉(zhuǎn)換方法
這篇文章主要介紹了Swift內(nèi)置的數(shù)字類型及基本的轉(zhuǎn)換方法,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-11-11
Swift開發(fā)之UITableView狀態(tài)切換效果
這篇文章主要介紹了Swift開發(fā)之UITableView狀態(tài)切換效果的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08

