LeetCode LCR072[x的平方根]

EricsT發表於2024-12-06

題目

連結

LeetCode LCR072[x的平方根]

詳情

LeetCode LCR072[x的平方根]

例項

LeetCode LCR072[x的平方根]

提示

LeetCode LCR072[x的平方根]

題解

思路一[暴力法]

由於所求的是整型且是正符號整型,可以採取迴圈遍歷的方式來求取平方根

用 for 迴圈將 i 由 0 開始遍歷

迴圈體:求 i 的平方值

當平方值小於指定值,此時迴圈繼續

退出迴圈的條件:

  1. 當平方值為指定值時,返回 i
  2. 當平方值大於指定值時,返回 i - 1

當 i 為有符號整型時,其遍歷到 46341 時,平方值為 2147488281 ,但是力扣官方的 int 值的範圍最大值為 2147483647,故其會溢位,所以 i 應該設定為 unsigned int 型

程式碼一

LeetCode LCR072[x的平方根]

思路二[二分查詢]

問題轉換一下,給定一個數,在範圍內找到該數,其實就是查詢問題,此處可採用二分查詢

初始值設定最小值 iMin 為 0,最大值 iMax 為給定值 x

開始迴圈:

求取中間值 iMid = (iMin + iMax) / 2

取中間值的平方 x1= iMid * iMid

若 x1 等於 x,則平方根為 iMid ,退出迴圈

若 x1 > x,即 iMid > sqrt(x),即所求值小於 iMid,需要在 iMin 到 iMid -1 範圍中查詢,即 iMax = iMid - 1

若 x1< x,即 iMid < sqrt(x),即所求值大於 iMid,需要在 iMid + 1 到 iMax 範圍中查詢,即 iMin = iMid + 1

在此處需要注意,由於該題平方根是取整的,所以有可能是找不著整數平方根的,需要在判斷的時候另外加一個條件:

如果中間值的平方 x,即 x > x1,則取中間值加1的值的平方根 x2,即判斷一下 x2 是否大於 x:如果大於,則平方根取整為 iMid,否則啊,繼續迴圈

也就是啊,x1 < x < x2,也就是 sqrt(x1) < sqrt(x) < sqrt(x2),即 iMid < sqrt(x) < iMid + 1,所以啊,取整之後的值就是 iMid,此時相當於是找到了平方根了,就退出迴圈了

繼續執行迴圈,直到 iMin > iMax,退出迴圈

程式碼二

LeetCode LCR072[x的平方根]

類似題目

LeetCode 367[有效的完全平方數] 題目

LeetCode 69[x的平方根] 題目

類似題解

LeetCode 367[有效的完全平方數] 題解

LeetCode 69[x的平方根] 題解

相關文章