1. 程式人生 > 其它 >整數取出每位數字_LeetCode 7. 整數反轉

整數取出每位數字_LeetCode 7. 整數反轉

技術標籤:整數取出每位數字

2021.1.2

7. 整數反轉

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

示例

輸入: 123 輸出: 321 輸入: -123 輸出: -321 輸入: 120 輸出: 21

一開始的思路是用除留餘數的方法,從後到前獲取x每一位上的值,然後構建新的數字res

程式碼如下:

var reverse = function(x) {
    let res = 0;
    let flag = false    //x是否為負數標記
    if(x<0) {
        x=-x
        flag = true
    }//先置為正,最後加符號
    while(x != 0) {        //對x的每一位數從後到前遍歷,倒置
        res = res*10 + x%10
        x = parseInt(x/10)    
    }
    if(flag) res=res*(-1) 
    if(res<=Math.pow(-2,31)||res>Math.pow(2,31)-1) return 0        //判斷倒置後的數字是否超出32位
    return res
};

8ac04b385ce14ff186cbc7101e8d19da.png
提交過程

這裡第一次錯誤的原因是沒有注意到數字位數限制,加上判斷即可

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

大神們較快的方法主要是將x轉為string處理

程式碼如下:

var reverse = function(x) {
    const str = String(Math.abs(x)).split("").reverse().join("")
    const res = x > 0 ? Number(str) : Number(str)*(-1)
    if(res<=Math.pow(-2,31)||res>Math.pow(2,31)-1) return 0
    return res
};

c44eda9915ef93523cee10218cd77a31.png
時間效率有所提高