一. 问题描述
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842...,
由于返回类型是整数,小数部分将被舍去。
二. 解题思路
本题主要采用二分查找来查找x的平方根m。这道题是比较简单的,但是要注意在进行二分查找时,对其初始值要有所限定,其最大值不能大于int类型的最大值2147483647。
步骤一:设置二分查找法的起点visit_first和终点visit_second。
步骤二:利用二分查找法进行查找(原理就不说了),其中最大值的限制条件要注意。
三. 执行结果
执行用时 :2 ms, 在所有 java 提交中击败了93.59%的用户
内存消耗 :33.7 MB, 在所有 java 提交中击败了75.11%的用户
四. Java代码
class Solution { public int mySqrt(int x) { int visit_first=0; int visit_second=((x)/2)+1; if(x>=Integer.MAX_VALUE||visit_second>Math.sqrt(2147483647)) { visit_second=(int)Math.sqrt(2147483647); } while(true) { int m=(visit_second+visit_first)/2; if((m*m)==x||((m*m)<x&&(m+1)>(int)Math.sqrt(2147483647))) { return m; } if((m*m)>x&&(m-1)*(m-1)<x) { return m-1; } if((m*m)<x) { visit_first=m+1; } else { visit_second=m-1; } } } }