WANG LH , Research & Development

Reverse Integer

2016.12.08 09:42

这里只使用了最简单的算法,直接从后往前遍历一遍,然后在类型转换。算法应该还有有待改进的地方。

package com.sea.leetcode;

/**
 * Created by Sea on 2016/12/7.
 *
 * 将一个整数进行反转。例如:
 * 输入123 输出321
 * 输入-123 输出-321
 * 注意几个点:
 * 1.反转以后前面是0则去掉,如1200,输出21.
 * 2.若是反转以后数值超出int范围,报异常,则返回0.
 */
public class ReverseInteger {
    public int reverse(int x) {

        //如果一位数,直接返回
        if ((x >= 0 && x < 9) || (x > -9 && x < 0)) {
            return x;
        }

        //判断是正数还是负数
        boolean isNegative = false;
        if (x < 0) {
            isNegative = true;
            x = 0 - x;
        }
        char[] numbers = String.valueOf(x).toCharArray();
        String strTemp = "";

        //反转以后把前面的0给去掉
        boolean isHeadZero = false;
        for (int k = numbers.length - 1; k >= 0; k--) {
            //确保只去掉前面的0,保留中间的0
            if (numbers[k] == '0' && !isHeadZero) {
                continue;
            }
            isHeadZero = true;
            strTemp += numbers[k];
        }

        int result = 0;

        //如果类型转换发生异常,返回0
        try {
            result = Integer.valueOf(strTemp);
        } catch (NumberFormatException e) {
            return 0;
        }
        if (isNegative) {
            result = 0 - result;
        }
        return result;
    }

    public static void main(String[] args) {
        int x = 150469;
        ReverseInteger reverseInteger = new ReverseInteger();
        System.out.println(reverseInteger.reverse(x));

    }
}