LeetCode系列之【7.整數反轉】C++ 每天一道leetcode!

目錄(快速導航)

題目描述

視頻講解  https://www.bilibili.com/video/av65921538/

思路

代碼


題目描述:

題目鏈接:https://leetcode-cn.com/problems/reverse-integer/

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

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

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

 

視頻講解

https://www.bilibili.com/video/av65921538/

 

思路:

這道題只需要掌握兩個點即可:

  • 想取得整數x的最後一位,只需要x%10即可。如x爲1234,那麼x%10=1234%10=4;
  • 想去除x的最後一位,只需要x/10即可。如x爲1234,那麼x/10=1234/10=123;

知道這兩點之後,就特別簡單了。

  1. 初始化x的反轉整數out爲0;
  2. 對於整數x,取得其最後一位,x%10,並將其拼接到out上,即:out*10+x%10;
  3. 之後就把x的最後一位去除,x/=10;
  4. 一直迭代這個過程,直到x爲0停止。

注意:

在這個過程中,需要判斷out是否溢出。那麼在第2步驟之前,檢測如果加上x%10,那麼out是否溢出。很簡單,首先判斷out,也就是如果out朝前進位是否大於INT_MAX/10。(INT_MAX爲C++宏定義,表示整數int的最大值2147483647),如果小於,說明可以進位,如果大於了,那就溢出了,返回0。如果out等於INT_MAX/10,那麼就看最後一位x%10是否大於7,如果大於7,那就溢出了。此外,對於負數,INT_MIN爲-2147483648,所以對於負數,在最後一位判斷時,查看x/10是否小於-8即可,小於就溢出。

 

代碼:

class Solution {
public:
    int reverse(int x) {
    int out =0;
    while(x!=0){
        // 查看是否溢出
        if(out > INT_MAX/10 || (out == INT_MAX/10 && x%10 > 7) || 
           out < INT_MIN/10 || (out == INT_MIN/10 && x%10 < -8)){
            return 0;
        }
        // 拼接反轉的數字
        out = out * 10 + x % 10;
        x/=10;
    }
    return out;
    }
};

一起加油!!刷題!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章