LeetCode之数学

9. 回文数

class Solution {

    // 定义一个判断整数 x 是否为回文数的函数
    public boolean isPalindrome(int x) {
        // 将整数 x 转换为字符串
        String xStr = String.valueOf(x);
        // 创建一个 StringBuilder 对象,用于反转字符串
        StringBuilder sb = new StringBuilder();
        // 将字符串 xStr 添加到 StringBuilder 中
        sb.append(xStr);

        // 比较原字符串和反转后的字符串是否相等
        // 如果相等,则说明 x 是回文数,返回 true;否则返回 false
        return xStr.equals(sb.reverse().toString());

    }

}

66. 加一

class Solution {

    // [1,2,3] -> [1,2,4] [1,2,9] -> [1,3,0] [9, 9, 9] -> [1, 0, 0, 0]
    // 定义一个方法来实现给定数字数组加一的功能
    public int[] plusOne(int[] digits) {

        // 从末尾开始进行循环
        for (int i = digits.length - 1; i >=0; i--) {
            // 对当前位加1,并对10取模得到新的位值
            digits[i] = (digits[i] + 1) % 10;
            // 如果当前位加1后不为0,说明没有进位,可以直接返回结果
            if (digits[i] != 0) {
                // 返回更新后的数组
                return digits;
            }
        }

        // 如果循环结束,说明所有位都进位了(如从 999 变成 1000)
        // 创建一个新的数组,长度比原数组大1
        digits = new int[digits.length + 1];

        // 将新数组的第一个位置设为1,其余位默认是0
        digits[0] = 1;

        // 返回新的数组
        return digits;
        
    }
}

172. 阶乘后的零

class Solution {
    public int trailingZeroes(int n) {
        // 用于统计末尾 0 的个数
        int ans = 0;
        // 当 n 不为 0 时进行循环
        while (n!= 0) {
            // n 除以 5,相当于统计 n 中有多少个 5 的因子
            n /= 5;
            // 将每次得到的 n 累加到 ans 中,因为每次 n/5 得到的结果都是 n 中 5 的因子个数的一部分
            ans += n;
        }
        // 返回末尾 0 的个数
        return ans;
    }
}

69. x 的平方根 

class Solution {

    // 定义一个方法来计算 x 的整数平方根
    public int mySqrt(int x) {
        // 初始化左右边界, 左边界从 0 开始
        int left = 0;
        // 右边界设置为 x
        int right = x;
        // 用于存储最终答案,初始值为 -1
        int ans = -1;
        // 使用二分查找来找到平方根
        while (left <= right) {
            // 计算中间值
            int mid = (left + right) / 2;
            // 使用 long 类型防止溢出
            if ((long) mid * mid <= x) {
                // 如果 mid 的平方小于等于 x,更新左边界
                left = mid + 1;
                // 更新答案为当前 mid
                ans = mid;
            } else {
                // 如果 mid 的平方大于 x,更新右边界
                right = mid - 1;
            }
        }
        // 返回找到的最大的平方根
        return ans;
    }

}

50. Pow(x, n)

class Solution {

    public double myPow(double x, int n) {
        long N = n;
        return N >= 0 ? helper(x, N) : 1.0 / helper(x, N);
    }

    public double helper(double x, long N) {
        if (N == 0) {
            return 1.0;
        }

        double y = helper(x, N / 2);

        return N % 2 == 0 ? y * y : y * y * x;

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值