zoukankan      html  css  js  c++  java
  • 【leetcode-69】 x 的平方根

    (主要是越界问题)

    实现 int sqrt(int x) 函数。

    计算并返回 x 的平方根,其中 是非负整数。

    由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

    示例 1:

    输入: 4
    输出: 2
    

    示例 2:

    输入: 8
    输出: 2
    说明: 8 的平方根是 2.82842..., 
         由于返回类型是整数,小数部分将被舍去。

        public int mySqrt(int x) {
            if (x==1) {
                return 1;
            }
            for (int i=0;i<=x/2;i++) {
                if (i*i == x) {
                    return i;
                } else if (i*i<x && (i+1)*(i+1)>x) {
                    return i;
                }
            }
            return 1;
        }
    输入
    2147483647
    输出
    1
    预期结果
    46340

    错误原因是数组越界,int最大开根号也就46340.9,从0~46340之间找到n,n的平方小于x,n+1的平方大于x,就好

    改成下面这样

        public int mySqrt(int x) {
            if (x==1) {
                return 1;
            }
            for (int i=0;i<=x/2;i++) {
                if ((long)i*(long)i == x) {
                    return i;
                } else if ((long)i*(long)i<x && (long)(i+1)*(long)(i+1)>x) {
                    return i;
                }
            }
            return 1;
        }
    成功
    执行用时 : 51 ms, 在Sqrt(x)的Java提交中击败了20.67% 的用户
    内存消耗 : 32.8 MB, 在Sqrt(x)的Java提交中击败了31.49% 的用户
  • 相关阅读:
    LeetCode【125. 验证回文串】
    LeetCode【122. 买卖股票的最佳时机 II】
    LeetCode【121. 买卖股票的最佳时机】
    LeetCode【119. 杨辉三角 II】
    LeetCode【118. 杨辉三角】
    LeetCode【112. 路径总和】
    PAT1024
    PAT1020
    PAT1018
    PAT1017
  • 原文地址:https://www.cnblogs.com/twoheads/p/10649021.html
Copyright © 2011-2022 走看看