实现sqrt函数
LeetCode上的一道题目,要求实现sqrt函数,即开平方。
这道题目要求有逆向思维,当一条路行不通的时候,看看有没有变通的方法。再做这道题的时候要比较n * n与 x的大小,这里有明显的一点就是n * n可能会溢出,所以怎样在避免溢出的情况下实现判断。这时候可以反过来看,比较 n 与 x / n的大小,将乘法转换成除法来运算,就可以实现了,代码如下:
public class Solution { public int sqrt(int x) { if (x == 0) { return 0; } int l = 0, r = Integer.MAX_VALUE; while (l < r) { int mid = (l + r) / 2; int tmp = x / mid; if (mid == tmp) { return mid; } else if(mid > tmp) { r = mid; } else { l = mid + 1; } } return l - 1; } }
                    
                
                
            
        
浙公网安备 33010602011771号