7. Reverse Integer
Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 click to show spoilers. Note: The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
这道题思路非常简单,就是按照数字位反转过来就可以,基本数字操作。但是这种题的考察重点并不在于问题本身,越是简单的题目越要注意细节,一般来说整数的处理问题要注意的有两点,一点是符号,另一点是整数越界问题。代码如下:
用的字符串, 考虑反转后大于MAX_VALUE:
if (Long.parseLong(s) > Integer.MAX_VALUE) { return 0; }
防止首字母为0, 但是如果只有0的话也要考虑
while (sb.charAt(0) == '0') { sb.deleteCharAt(0); }
public int reverse(int x) { if (x == Integer.MIN_VALUE || x == 0) { return 0; } boolean isNeg = false; if (x < 0) { isNeg = !isNeg; x = -x; } String s = ""; StringBuilder sb = new StringBuilder(); s += x; int i = 0, j = s.length() - 1; while (j >= 0) { sb.append(s.charAt(j)); j--; }
// 要注意!!!数字的首字母非0 while (sb.charAt(0) == '0') { sb.deleteCharAt(0); } s = sb.toString(); if (Long.parseLong(s) > Integer.MAX_VALUE) { return 0; } int ans = Integer.valueOf(s); return isNeg ? -ans : ans; }
用%翻转, / 递进
public int reverse(int x) { int res = 0; while (x != 0) { int digit = x % 10; x = x / 10; if (res > Integer.MAX_VALUE / 10|| res == Integer.MAX_VALUE && digit > 7) { return 0; } if (res < Integer.MIN_VALUE / 10 || res == Integer.MIN_VALUE && digit < 8) { return 0; } res = res * 10 + digit; } return res; }
注意Integer.MIN_VALUE的绝对值是比Integer.MAX_VALUE大1的,所以经常要单独处理。如果不先转为正数也可以,只是在后面要对符号进行一下判断。这种题目考察的就是数字的基本处理,面试的时候尽量不能错,而且对于corner case要尽量进行考虑,一般来说都是面试的第一道门槛。