zoukankan      html  css  js  c++  java
  • leecode刷题(12)-- 整数反转

    leecode刷题(12)-- 整数反转

    整数反转

    描述:

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    示例 1:

    输入: 123
    输出: 321
    

    示例 2:

    输入: -123
    输出: -321
    

    示例 3:

    输入: 120
    输出: 21
    

    注意:

    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    思路:

    这道题总感觉以前见过,跟我们上一道做的反转字符串还是有一些些相似的,但我们不用建立另外的数组来反转整数,这里我们只需要进行相关的数学操作,每次拿出整数的最后一位,放到新建的整数变量 rev 后面,最后,rev便和 x 完全相反了。

    代码如下:

    class Solution {
        public int reverse(int x) {
            int rev = 0;
            while (x != 0) {
                int pop = x % 10;
                x /= 10;
                rev = rev * 10 + pop;
            }
            return rev;
        }
    }
    

    这是代码第一版,思路很简单,但是我们忽略了一个问题,那便是当 rev = rev * 10 + pop 会发生溢出,我们这里需要做溢出判断。

    假设 rev 为正数,如果 rev = rev * 10 + pop 发生溢出,那么一定有 rev >= INTMAX / 10 。

    同样的,当 rev 为负数时,rev <= INTMIN / 10 会发生溢出。

    同时我们需要注意 pop 的数值,题目中整数的数值范围为 [−2^31, 2^31 − 1],231-1=2147483647,-231=-2147483648,注意最后一位数。

    我们修改我们的代码,添加条件,当发生溢出时返回 0 。

    完整代码如下:

    public class ReverseInt {
    	public int reverse(int x) {
    		int rev = 0;
    		while (x != 0) {
    			int pop = x % 10;
    			x /= 10;
    			if (rev > Integer.MAX_VALUE / 10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) {
    				return 0;
    			}
    			if (rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) {
    				return 0;
    			}
    			rev = rev * 10 + pop;
    		}
    		return rev;
    	}
    
    	public static void main(String[] args) {
    		int x = -321;
    		ReverseInt reverseInt = new ReverseInt();
    		System.out.println(reverseInt.reverse(x));
    	}
    }
    
  • 相关阅读:
    No.20 selenium学习之路之文件读写
    No.19 selenium学习之路之os模块
    No.18 selenium学习之路之批量执行测试用例
    python进阶学习之高阶函数
    python进阶学习之匿名函数lambda
    No.17 selenium学习之路之判断与等待
    Educational Codeforces Round 83 (Rated for Div. 2)【ABCDEF】(题解)
    Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)【ABCDE】(题解)
    牛客练习赛58【ABCDEF】(题解)
    CodeCraft-20 (Div. 2)【ABCDE】(题解)
  • 原文地址:https://www.cnblogs.com/weixuqin/p/10256906.html
Copyright © 2011-2022 走看看