【LeetCode】No.7. Reverse Integer -- Java Version

124 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

题目连接: leetcode.com/problems/re…

1. 题目介绍

  Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-2^31^, 2^31^ - 1], then return 0.

【Translate】: 给定一个带符号的32位整数x,返回x并反转其数字。如果反转x值超出有符号32位整数范围[-2^31^, 2^31^ - 1],则返回0。

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

【Translate】: 假定环境不允许存储64位整数 (signed or unsigned).

测试用例:

test1

约束:

Constraints

2. 题解

2.1 StringBuilder反转后转型 -- O(n)

  这一题相对于其它Medium属于比较简单的。整体要求就是给出一个整形数字,把它反转输出即可。它的难度在于,如何做到最快。我的这个想法是属于比较简单大众的,就是先将整形数字转型成字符串进行存储,然后按位取出存入字符数组,同时借助了StringBuilder的插入函数,可以将‘-’号拆入首部,最后判断一下是否越界即可。

class Solution {
    public int reverse(int x) {
        String s = String.valueOf(x);
        char[] arr = s.toCharArray();
        StringBuilder sb = new StringBuilder();
        for(int i = s.length()-1; i >= 0; i--)
        {
            if (arr[i] == '-')
            {
                sb.insert(0, arr[i]);
            }else{
                sb.append(arr[i]);
            }
            
        }
        System.out.println(sb);
        long l = Long.parseLong(sb.toString());
        // 判断是否越界
        if (l < -Math.pow(2, 31) || l > Math.pow(2, 31) - 1) {
            return 0;
        }
        
        return (int)l;
    }
}

case1 如果不对其进行越界判断,就会出现以下错误,且不符合题目要求 error1

2.2 极致精简

  题解来源于力扣(07)一道简单题引起的一系列问题,通过对x的取余,我们可以从小到大一步一步得到想要的数字,然后让n*10,直到x为0。最后根据条件表达式,判断是否越界。确实NB!!!

    public static int reverse(int x) {
        long n = 0;
        while (x != 0) {
            n = n * 10 + x % 10;
            x /= 10;
        }
        return (int) n == n ? (int) n : 0;
    }

case2

3.可参考

[1] Java StringBuffer insert()方法

[2] 如何将StringBuffer类型转换为Int类型

[3] 力扣(07)一道简单题引起的一系列问题

[4] 在 Java 中添加字符到字符串

[5] java int怎么转换为string