整數(shù)反轉(zhuǎn)

LeetCode第七題

題目描述:
給出一個 32 位的有符號整數(shù),你需要將這個整數(shù)中每位上的數(shù)字進行反轉(zhuǎn)。

示例 1:

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

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

輸入: 120
輸出: 21
注意:

假設(shè)我們的環(huán)境只能存儲得下 32 位的有符號整數(shù),則其數(shù)值范圍為 [?231, 231 ? 1]。請根據(jù)這個假設(shè),如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-integer

思路

采用除以10和取余操作,獲取反轉(zhuǎn)的數(shù)字。為了使程序過程更清晰,創(chuàng)建一個數(shù)組,用來存儲反轉(zhuǎn)數(shù)的每位數(shù)值。再循環(huán)乘以基的各次方累加,就得到了目標(biāo)值。最后將得到的值與int型最大最小值比較,若溢出則將目標(biāo)值置0。然后返回目標(biāo)值即可。

源代碼

int reverse(int x){
    int nums[11] = {0};      //32位有符號整數(shù)化為十進制不超過11位,此數(shù)組存儲反轉(zhuǎn)數(shù)的每位數(shù)值
    const int mod = 10;      //將模10定義為const類型
    int num = x;             //num為每次遍歷剩下未處理的數(shù)
    int i = 0,j = 0;    
    double result = 0;       //結(jié)果值定義為double型,防止值溢出int型而報錯
    while(num != 0){
        nums[i] = num % mod;
        num /= mod;
        ++i;
    }
    double sub = 1;          //以10為基,防止值溢出int型而報錯
    if(i > 0){
        for(j = i - 1,sub = 1;j >= 0;--j,sub *= mod){
            result += nums[j] * sub;
        }
    }
    if(result > 2147483647 || result < (-2147483648)){
        result = 0;
    }
    return result;
}

分析

時間復(fù)雜度為線性級別,空間復(fù)雜度為常數(shù)級別。
然而數(shù)組的創(chuàng)建不是必須的,可以在while循環(huán)內(nèi)部就將result累加起來。這樣代碼會更加簡潔。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容