LeetCode7题数字反转

LeetCode7题数字反转

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

示例 1:

输入: 123
输出: 321
示例 2:

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21
注意:

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

常规解法

package com.lsy.DateStructure.solution;

public class Leet7 {
     
    public int reverse(int x) {
     
        int cur = 0;//定义最要得到的反转数
        while (x != 0) {
     
            int pop = x % 10;//取出x的末尾数
            x = x / 10;
            /*
            对cur分析
            要考虑数字反转后的溢出情况
            1.cur > Integer.MAX_VALUE / 10 || (cur < Integer.MIN_VALUE / 10)
            如果在最后一次出现溢出情况 要求cur大于最小值除以10并且cur小于最大值除以10
            如果不进行判断,那么进行cur = cur * 10 + pop;cur值会溢出
            2.(cur == Integer.MAX_VALUE / 10 && pop > 7) || (cur == Integer.MIN_VALUE / 10 && pop < -8)
            这个判断在int型其实是多余的 因为int型的最高位数是1或2,所以没有必要判断最高位
             */
            if (cur > Integer.MAX_VALUE / 10 || (cur < Integer.MIN_VALUE / 10)) {
     
                return 0;
            } else if ((cur == Integer.MAX_VALUE / 10 && pop > 7) || (cur == Integer.MIN_VALUE / 10 && pop < -8)) {
     
                return 0;
            }
            cur = cur * 10 + pop;
        }
        return cur;
    }

转字符串解法

转字符串方法就是一步一步慢慢的来转

1.定义一个String,将int转换String

2.先定义一个StringBuilder类进行字符串String的反转

3.在用toString方法将StringBuider转换为String

4.将String转换为Integer类

5.最后再将Integer转换为int型,在转化时有溢出的话,直接进行try…catch

这方法比常规方法直接,不用思考溢出时的问题

if (x>=0) {
     
            String string = String.valueOf(x);
            StringBuilder stringBuilder = new StringBuilder(string).reverse();
            String string1 = stringBuilder.toString();
            try {
     
                Integer integer = new Integer(string1);
                return integer.intValue();
            } catch (Exception e) {
     
                return 0;
            }
        }
        else {
     
            x=Math.abs(x);
            String string = String.valueOf(x);
            StringBuilder stringBuilder = new StringBuilder(string).reverse();
            String string1 = stringBuilder.toString();
            try {
     
                Integer integer = new Integer(string1);
                return -integer.intValue();
            } catch (Exception e) {
     
                return 0;
            }
        }

大佬解法

判断溢出的方法比较好理解,代码还简洁

(cur*10)/10!=cur 当cur * 10大于int型的最大值会自动进行缩减,在对它取余必然和之前的数不相等

         int pop;
        int cur = 0;
        while(x!=0){
     
            pop=x%10;
            x=x/10;
            if((cur*10)/10!=cur){
     
                return 0;
            }
            cur =  cur *10+pop;
        }
        return  cur;

你可能感兴趣的:(java,算法,leetcode)