LeetCode 7題デジタル反転


LeetCode 7題デジタル反転
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.Stringメソッドで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;