美文网首页
Reverse Integer

Reverse Integer

作者: 爱吃火锅的金先生 | 来源:发表于2020-09-04 03:03 被阅读0次
    Given a 32-bit signed integer, reverse digits of an integer.
    Example 1:
    Input: 123
    Output: 321
    Example 2:
    Input: -123
    Output: -321
    Example 3:
    Input: 120
    Output: 21
    

    此题一开始本人想到的是将整数 x 转换为字符串,使用索引将字符串挤压到 stack 中,再从 stack 中 pop 字符,判断字符类型,拼接为整数
    但这一方法,无法判断 overflow 的边界,其实也可以判断,但是合理的思路应该是在每次置换一个数字的时候就进行判断
    所以只要找到每次的结尾数字就可以了
    通过取模可以得到一个数末尾的数字
    12345 % 10 可以得到末尾数字 5
    12345 / 10 得到 1234
    1234 % 10 可以得到末尾数字 4,同时 5 * 10 + 4 = 54
    1234 / 10 得到 123
    123 % 10 可以得到末尾数字 3,同时 54 * 10 + 3 = 543
    123 / 10 得到 12
    12 % 10 可以得到末尾数字 2,同时 543 * 10 + 2 = 5432
    12 / 10 得到 1
    1 % 10 可以得到末尾数字 1,同时 5432 * 10 + 1 = 54321
    这就是处理正数的方式
    那负数呢?
    答案是一样的
    但是判断的条件就确定为了 while(x != 0)
    现在来判断是否 overflow
    最大的 32 位整数是 2147483647
    有的数,比如 1147483649 这样的数,本身是不大于最大的 32 位整数的,但是反转过来就大了,甚至有些数字需要提前判断
    2 1 4 7 4 8 3 6 4 7
    2 1 4 7 4 8 3 6 5 0 通过这个数字可以判断,其原数字 1563847412 反过来是不行的
    2 1 4 7 4 8 3 6 4 (2-9) 这种数字,其原数字不用判断就已经溢出了
    2 1 4 7 4 8 3 6 4 1 是可以进行反转的
    所以在这个最大数字的 10 分之 1 的时候就应该进行判断了
    如果一个反转过来的数大于 214748364,后边无论加任何数,都会溢出
    如果一个反转过来的数等于 214748364,那么就需要判断最后的一位数了,如果最后一位数比 7 还大,那就溢出了
    对于负数

    • 2 1 4 6 4 8 3 6 4 8
      也是一样
      如果一个反转过来的数小于 -214648364,后边无论加任何数,都会溢出
      如果一个反转过来的数等于 -214648364,那么就需要判断最后一位数了,如果最后一位数比 8 还小,那就溢出了
      所以代码是这样的
    class ReverseInteger {
        public int reverse(int x) {
            int result = 0;
            while(x != 0) {
                // 取模取末尾数字
                int temp = x % 10;
                // 判断是否大于最大的 32 位整数
                if(result > 214648364 || (result == 214648364 && temp > 7)) {
                    return 0;
                }
                // 判断是否小于最小的 32 位整数
                if(result < -214648364 || (result == -214648364 && temp < -8)) {
                    return 0;
                }
                result = result *  10 + temp;
                x = x / 10;
            }
            return result;
        }
    }
    

    相关文章

      网友评论

          本文标题:Reverse Integer

          本文链接:https://www.haomeiwen.com/subject/xqhurktx.html