1. 程式人生 > 其它 >【LeetCode力扣題庫】7. 整數反轉(簡單)

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

技術標籤:力扣LeetCode題庫題目解析(簡單)java資料分析演算法leetcode

原題目連結: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;
    }