Reverse digits of an integer. Returns 0 when the reversed integer overflows (signed 32-bit integer).git
Given x = 123, return 321code
Given x = -123, return -321it
这道题有一些细节须要留意。新数res会不会溢出?符号位如何处理?
用惯用的作法,n除以10取余,获得最低位cur,放进res。每次循环res乘以10累加当前最低位cur,同时n除以10不断减少。
要点在于考虑res乘10累加运算的状况,用分支语句判断发生溢出的条件。不能直接写if (res * 10 + cur > Integer.MAX_VALUE)
,由于res * 10
就有可能会溢出了;而要用(Integer.MAX_VALUE - cur) / 10
,由于只有减法和除法,结果不可能溢出。
最后的结果要加上以前排除的符号位。io
public class Solution { public int reverseInteger(int n) { boolean isNeg = n < 0; n = isNeg ? -n : n; int res = 0; while (n != 0) { int cur = n % 10; if (res >= (Integer.MAX_VALUE - cur) / 10) return 0; res = res * 10 + cur; n /= 10; } return isNeg ? -res : res; } }