4. 整數反轉

回歸次數:0

題目:

著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。


示例 1:

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

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

輸入: 120
輸出: 21
注意:

假設我們的環境只能存儲得下 32 位的有符號整數,則其數值范圍為 [?231, 231 ? 1]。請根據這個假設,如果反轉后整數溢出那么就返回 0。

解答:


public class Solution2 {

    /**
     * 方法一,把字符串一個一個存入棧里面,后進先出原則
     * @param x
     * @return
     */
    public int reverse(int x) {

        try{
            StringBuffer buffer = new StringBuffer();
            String temp = String.valueOf(x);
            boolean flag = false;
            if (temp.startsWith("-")){
                flag = true;
                temp = temp.substring(1,temp.length());
            }

            int[] list = new int[temp.length()];
            for(int i = 0;i < temp.length();i ++){

                String t = String.valueOf(temp.charAt(i));
                int c = Integer.parseInt(t);
                list[i] = c;

            }

            for (int i = list.length - 1;i >= 0;i --){

                buffer.append(list[i]);
            }

            String result = buffer.toString();
            while (result.startsWith("0") && result.length() != 1){
                result = result.substring(1,result.length());
            }

            if (flag){
                result = "-" + result;
            }

            int res = Integer.parseInt(result);
            return res;
        }catch (Exception e){
            return 0;
        }
    }


    /**
     * 官方解法
     * @param x
     * @return
     */
    public int reverse2(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 > Integer.MAX_VALUE % 10)){
                return 0;
            }

            if (rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && pop < Integer.MIN_VALUE % 10)){
                return 0;
            }

            rev = rev * 10 + pop;
        }
        return rev;
    }

    public static void main(String[] args) {

        Solution2 s = new Solution2();
        System.out.println(s.reverse(1534236469));
    }
}


?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。 示例 1: 輸入: 123輸出: 321...
    無名指666閱讀 262評論 0 0
  • 需求 給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。 示例 1:輸入: 123輸出: 3...
    惑也閱讀 956評論 0 1
  • 題目 給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。 示例 1:輸入: 123輸出: 3...
    大鵝向東游閱讀 91評論 0 0
  • 很多事情都是相反的,比如減肥期間你扔掉的都是你想吃的,失戀后你刪除的都是你想挽留的,看到暗戀的人喜歡別人還硬撐著說...
    良人不再來閱讀 235評論 0 0
  • 七律·官護山賞格桑花 鑒陸游《賞花至湖上》韻吟之 2018年11月3日 官護格桑齊魯稀, 山林映日敞朱扉。 帥哥花...
    環綠山民閱讀 1,129評論 0 0