这里只使用了最简单的算法,直接从后往前遍历一遍,然后在类型转换。算法应该还有有待改进的地方。
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));
}
}