zoukankan      html  css  js  c++  java
  • Implement int sqrt(int x).

    自己设计函数,实现求根号。x是非负整数。

    Input: 8

    Output: 2

    当开出根号后有小数,则省略小数部分。。

    思路:只要找到一个数a,a*a<=x而且(a+1)*(a+1)>x,则a就是开根号后的结果。

    这里要注意a*a因为<=x,不会溢出,但是(a+1)*(a+1)则可能会导致溢出。一种解法就是将两者结果比较,后者小于前者,说明后者溢出了(则后者应该肯定大于x),这是返回a就行。还有一种就是改写上面不等式,将乘号除到右边,变成除,就不会出现溢出。见代码

    解法1:暴力解法。

      public int mySqrt(int x) {
            if(x==0) return 0;
           for(int i=1;i<=x;i++){
              //防止溢出
                if(i<=x/i&&(i+1)>x/(i+1)) return i;
            }
            return 0;
        }

    解法二:利用二分查找。

    class Solution {
        public int mySqrt(int x) {
            if(x==0) return 0;
            //二分查找
            int left=1,right=x;
            while(left<right){
                int mid=(left+right)/2;
          //在二分查找中加入一个判断
    if(mid<=x/mid&&(mid+1)>x/(mid+1)) return mid; else if(mid>x/mid) right=mid-1; else left=mid+1; } return left; } }
  • 相关阅读:
    WinForm窗体传值 总结
    SQLServer遍历数据库所有表及统计表数据总数
    GridView合并行代码
    日期转换成字符串
    flex与js交互浅析
    九,query task
    八,graphics
    十,Find and Identity
    转移批令
    db dw dd 和 dup
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8067808.html
Copyright © 2011-2022 走看看