class Solution {
public:
    /**
     * 
     * @param x int整型 
     * @return int整型
     */
    int mysqrt(int x) {
        int l = 1, r = x / 2;
        while (l <= r) {
            int m = l + (r - l) / 2;
            long long tar = (long long)m * m;
            if (tar < x) {
                l = m + 1;
            } else {
                r = m - 1;
            }
        }
        return l * l == x? l: r;
    }
};

思路:二分查找。

因为是向下取整,所以查找完后要先判断l是否正好是x的平方根,是则返回l,否则r是x平方根向下取整。