LeetCode[Math]: Sqrt(x)

来源:互联网 发布:java 动态方法 编辑:程序博客网 时间:2024/05/21 18:44

Implement int sqrt(int x)
Compute and return the square root of x.

这个题目适合用位操作来做,时间和空间复杂度都是O(1)。首先找到根的最高位,然后从最高位开始,依次判断各个位值是否为1。C++代码实现如下:

    int sqrt(int x) {        int i, j, res = 0;        for (i = 0; i < 32; i++) {            if ((long)(1<<i) * (1<<i) > x) break;        }        for (j = i - 1; j >= 0; --j) {            long tmp = res | (1 << j);            res |= (tmp * tmp <= x) << j;        }        return res;    }

这种解法的时间性能如下图所示:


0 0
原创粉丝点击