leetcode-7. Reverse Integer

本文介绍了一种数字反转算法的实现方式,包括使用字符串处理和数学运算两种方法,并详细解释了每一步的操作过程及其注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目类型:字符串

题意:

数字反转,给出一个数字,将他的各个位反转,例如123->321,-123->-321
- 注意负数符号不参与。
- 注意反转后开头的0要去掉,例如120->21
- 注意int反转后可能成为double:1534236469/-1534236469,当数组越界int输出0

知识点:

String转化成int,
- valueOf
- Integer.parseInt()

我的思路:

  1. 将x是转化为string,从后往前找到第一个不为0的数的下标index
  2. 如果x为正,从index到0倒序拼接
  3. 如果x为负,从index到1倒序拼接,结果乘以-1
  4. 如果结果越界,return 0,否则输出。
    public int reverse(int x) {
        String s = String.valueOf(x);
        int len = s.length();
        int start = len - 1;
        int end = 0;
        if (x < 0) end = 1;
        for (int i = len - 1; i >= end; i--) {
            if (i != 0) {
                start = i;
                break;
            }
        }
        StringBuilder builder = new StringBuilder();
        for(int i = start; i >= end; i--) builder.append(s.charAt(i));
        double temp = Double.valueOf(builder.toString());
        if (temp > Integer.MAX_VALUE || temp < Integer.MIN_VALUE) {
            return 0;
        }
        else return (int) (temp * ((end == 0) ? 1 : -1));
    }

方法二:用double来接收

74%

对x不断除以10取余,res += res * 10 + 余数。

    public int reverse(int x) {
        double res = 0;
        while (x != 0) {
            res = res * 10 + x % 10;
            x /= 10;
        }
        if (res > Integer.MAX_VALUE || res < Integer.MIN_VALUE) {
            return 0;
        }
        return (int)res;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值