LeetCode?題解?Swift?有效的完全平方數(shù)
題目
給定一個 正整數(shù) num
,編寫一個函數(shù),如果 num
是一個完全平方數(shù),則返回 true
,否則返回 false
。
進(jìn)階:不要 使用任何內(nèi)置的庫函數(shù),如 sqrt
。
示例 1:
輸入: num = 16
輸出: true
示例 2:
輸入: num = 14
輸出: false
方法一:使用內(nèi)置的庫函數(shù)
思路及解法
根據(jù)完全平方數(shù)的性質(zhì),我們只需要直接判斷 num\textit{num}num 的平方根 xxx 是否為整數(shù)即可。對于不能判斷浮點(diǎn)數(shù)的值是否等于整數(shù)的語言,則可以通過以下規(guī)則判斷:
class Solution { func isPerfectSquare(_ num: Int) -> Bool { let x: Int = Int(sqrt(Double(num))) return x * x == num } }
復(fù)雜度分析
代碼中使用的 pow 函數(shù)的時(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ù)雜度分析
- 時(shí)間復(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)文章
openstack重啟swift服務(wù)后報(bào)錯問題解決方案
這篇文章主要介紹了解決openstack重啟swift服務(wù)后報(bào)錯,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08深入解析Swift中switch語句對case的數(shù)據(jù)類型匹配的支持
這篇文章主要介紹了Swift中switch語句對case的數(shù)據(jù)類型匹配的支持,Swift中switch...case語句支持多種數(shù)據(jù)類型的匹配判斷,十分強(qiáng)大,需要的朋友可以參考下2016-04-04swift中利用runtime交換方法的實(shí)現(xiàn)示例
這篇文章主要給大家介紹了關(guān)于swift中利用runtime交換方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-05-05