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要尽量进行考虑,一般来说都是面试的第一道门槛。

posted @ 2017-08-08 16:32  apanda009  阅读(133)  评论(0编辑  收藏  举报