【LeetCode力扣題庫】7. 整數反轉(簡單)

原題目鏈接:7.整數反轉


題目描述:


給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。

 

注意:

假設我們的環境只能存儲得下 32 位的有符號整數,則其數值範圍爲 [-2^{31}2^{31} − 1]。請根據這個假設,如果反轉後整數溢出那麼就返回 0。
 

示例 1:

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

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

輸入:x = 120
輸出:21
示例 4:

輸入:x = 0
輸出:0
 

提示:

-2^{31} <= x <= 2^{31} - 1

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-integer
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

做題思路:

  1. 我們先了解兩個知識點
  2. 第一點,注意看題目,我們需要對反轉後的數據進行計算,首先,我們知道int類型的取值範圍是【-2^{31} ,2^{31} - 1】即: -2147483648 ~ 2147483647 ,所以也就是說,當我們反轉後的數據不在【-2^{31} ,2^{31} - 1】這個區間裏面,則會出現溢出現象,根據題目,一旦出現溢出現象,就返回0
  3. 我們舉幾個例子來了解一下,例如我們假設規定的區間是【-2^{9}2^{9} - 1】,即:-512 ~ 511,只要不在這個區間的反轉數據就算溢出

         3.1  例如x = 125,將其反轉後就是521,因爲521 > 511,所以溢出

         3.2  例如x = 315,將其反轉後就是513,以爲513 > 511,所以溢出

     4.  第二點,int類型是自動取整的,例如 125 / 10 = 12,例如 315 / 10 = 31,以上的所有數據都是int類型,也就是說,jvm自動幫我們去掉了餘數,也就是小數點的後面,這個知識點稱爲自動取整。

     5.在瞭解完兩個知識點之後,開始分析如何進行數據反轉(x是題目給出的要進行反轉的數據)

          5.1  我們對x不斷地餘10,也就是%10,得出從個位數開始的每個數字,例如 125 ,第一次%10之後,125 -> 12.5 -> 5

          5.2  在不斷地對x取餘的同時,從個位數開始,用ans進行拼接

          5.3  在拼接之後,記得要對x不斷地除10,自動取整,因爲取出的各個數字已經拼接到ans了,所以要通過除10去掉

我們以x = 123反轉進行自制動畫演示

點擊這裏在B站看動畫演示喔,喜歡的客官可以點點關注,謝謝

廢話不多說,直接上代碼,爲了讓各位看官更能清晰理解,我的代碼寫得不精簡,我的代碼里加了大量的註釋,相信各位看官可以理解,如果我有些沒寫清楚或者寫錯的,可以評論區或者私信我喔

 public int reverse(int x) {
        //這個代表反轉後的數據
        //ans是answer的縮寫
        int ans = 0;
        while( x != 0){
            //判斷是否溢出
            //由於int類型超出後會變成long類型
            //所以在*10 / 10之後仍然等於int類型,就說明還沒有溢出現象
            if((ans * 10) / 10 != ans){ //如果不是int類型了
                //發生溢出現象,返回0
                ans = 0;
                break;
            }
            //ans的拼湊
            ans = ans * 10 + x % 10;
            //x是int類型,所以會自動取整
            x = x / 10;
        }
        return ans;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章