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));
    	}
    }
    
  • 相关阅读:
    redis
    docker :no such file or directory
    删除Linux的用户
    lunux系统安全
    centos7.4yum错误
    POI2014 HOT-Hotels
    POI2009 KON-Ticket Inspector
    CF140E New Year Garland
    CF392B Tower of Hanoi
    落谷 P2401 不等数列
  • 原文地址:https://www.cnblogs.com/weixuqin/p/10256906.html
Copyright © 2011-2022 走看看