leetcode-7. Reverse Integer

题目类型:字符串

题意:

数字反转,给出一个数字,将他的各个位反转,例如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;
    }

猜你喜欢

转载自blog.csdn.net/NNnora/article/details/81210185