问题:给定一个 32 位有符号整数,将整数中的数字进行反转。如若溢出则输出 0.
输入: -123
输出: -321
思路:难点在与判断是否溢出,我这里采用字符串比较。
package xyz.quxiao.play.lab.leetcode;
/**
* 数字反转,符号不反转,最大32位有符号,溢出返回0 * * @author 作者 :quxiao 创建时间:2018/8/30 23:12
*/public class Problem7 {
public static void main(String[] args) {
Problem7 problem7 = new Problem7();
System.out.println(problem7.reverse(-123));
}
public int reverse(int x) {
String rev;
boolean positive = x > 0;
String xStr = String.valueOf(Math.abs(x));
StringBuilder sb = new StringBuilder();
sb.append(positive ? "" : "-");
for (int i = xStr.length() - 1; i >= 0; i--) {
sb.append(xStr.charAt(i));
}
String reversed = sb.toString();
if (isOverflow(reversed, positive)) {
return 0;
} else {
return Integer.parseInt(reversed);
}
}
private boolean isOverflow(String str, boolean positive) {
String posMax = String.valueOf(Integer.MAX_VALUE);
String negMax = String.valueOf(Integer.MIN_VALUE);
String target = positive ? posMax : negMax;
if (str.length() < target.length()) {
return false;
} else if (str.length() == target.length()) {
return str.compareTo(target) > 0;
} else {
return true;
}
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于