LeetCode 69[x的平方根]

题目

链接

LeetCode 69[x的平方根]

详情

实例

提示

题解

思路一[暴力法]

由于所求的是整型且是正符号整型,可以采取循环遍历的方式来求取平方根

用 for 循环将 i 由 0 开始遍历,求平方值

当平方值小于指定值,此时循环继续

直到以下两种情况时退出循环:

  1. 当平方值为指定值时,返回 i 
  2. 当平方值大于指定值时,返回 i - 1

当 i 为有符号整型时,其遍历到 46341 时,平方值为 2147488281 ,但是力扣官方的 int 值的范围最大值为 2147483647,故其会溢出,所以 i 应该设置为 unsigned int 型

代码一

思路二[二分法]

问题转换一下,给定一个数,在范围内找到该数,其实就是查找问题,此处可采用二分查找

 

初始值设定最小值 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

继续执行循环,直到 iMin > iMax,退出循环

 

在此处需要注意,由于该题平方根是取整的,所以有可能是找不着整数平方根的,需要在判断的时候另外加一个条件:

如果中间值的平方 x,即 x > x1,则取中间值加1的值的平方值 x2,即判断一下 x2 是否大于 x:如果大于,则平方根取整为 iMid,否则啊,继续循环

也就是啊,x1 < x < x2,也就是 sqrt(x1) < sqrt(x) < sqrt(x2),即 iMid < sqrt(x) < iMid + 1,所以啊,取整之后的值就是 iMid,此时相当于是找到了平方根了,就退出循环了

代码二

类似题目

LeetCode 367[有效的完全平方数] 题目

LeetCode LCR072[x的平方根] 题目

类似题解

LeetCode 367[有效的完全平方数] 题解

LeetCode LCR072[x的平方根] 题解

posted @ 2024-11-13 11:16  EricsT  阅读(15)  评论(0编辑  收藏  举报