问题:给定一个 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; } } }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于