7.給出一個(gè) 32 位的有符號整數(shù),你需要將這個(gè)整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:假設(shè)我們的環(huán)境只能存儲(chǔ)得下 32 位的有符號整數(shù),則其數(shù)值范圍為 [?2^31, 2^31 ? 1]。請根據(jù)這個(gè)假設(shè),如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-integer
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

image.png
解法:算法基本思路:
s1: ans作為反轉(zhuǎn)數(shù)變量 ,初始值為0
s2: 進(jìn)入while循環(huán),x為初始值,當(dāng)x=0時(shí)退出
s3: 求x的余數(shù),命名為pop,如4396可以獲得pop=6
s4: 尾數(shù)ans = ans*10 + pop
s5:判斷反轉(zhuǎn)數(shù)是否大于或等于數(shù)值范圍最大值,或是小于等于數(shù)值范圍的最小值,若是,進(jìn)入s7
s6: 若x大于0,則對x賦值x/10(向下取整),若x<0,則x=x/10(向上取整),進(jìn)入s2
s7: 反轉(zhuǎn)后的數(shù)值不在數(shù)值范圍,退出
使用Math.pow(x,y) // x:底數(shù) y:冪次數(shù),可以計(jì)算出數(shù)值范圍,分別為2147483647,-2147483648,
var reverse = function(x) {
const MAX_VALUE = Math.pow(2,31)- 1
const MIN_VALUE = Math.pow(-2,31)
let ans = 0
while(x!=0) {
// 求模,相當(dāng)于求x的最小位數(shù)
const pop = Math.floor(x%10)
ans = ans*10 +pop
if(ans >=MAX_VALUE ) {
return 0
}
if(ans <=MIN_VALUE){
return 0
}
x = x>0?Math.floor(x/10):Math.ceil(x/10)
}
return ans
};