【LeetCode力扣題庫】7. 整數反轉(簡單)
技術標籤:力扣LeetCode題庫題目解析(簡單)java資料分析演算法leetcode
原題目連結:7.整數反轉
題目描述:
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
注意:
假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 [, − 1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。
示例 1:
輸入:x = 123
輸出:321
示例 2:
輸入:x = -123
輸出:-321
示例 3:
輸入:x = 120
輸出:21
示例 4:
輸入:x = 0
輸出:0
提示:
<= x <= - 1
來源:力扣(LeetCode)
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
做題思路:
- 我們先了解兩個知識點
- 第一點,注意看題目,我們需要對反轉後的資料進行計算,首先,我們知道int型別的取值範圍是【, - 1】即: -2147483648 ~ 2147483647 ,所以也就是說,當我們反轉後的資料不在【, - 1】這個區間裡面,則會出現溢位現象,根據題目,一旦出現溢位現象,就返回0
- 我們舉幾個例子來了解一下,例如我們假設規定的區間是【,- 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;
}