亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++實現LeetCode翻轉整數的方法

發布時間:2021-07-10 10:24:00 來源:億速云 閱讀:150 作者:chen 欄目:開發技術

這篇文章主要介紹“C++實現LeetCode翻轉整數的方法”,在日常操作中,相信很多人在C++實現LeetCode翻轉整數的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++實現LeetCode翻轉整數的方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

[LeetCode] 7. Reverse Integer 翻轉整數

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output: 321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21

Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [?231,  231 ? 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

翻轉數字問題需要注意的就是溢出問題,看了許多網上的解法,由于之前的 OJ 沒有對溢出進行測試,所以網上很多人的解法沒有處理溢出問題也能通過 OJ。現在 OJ 更新了溢出測試,所以還是要考慮到。為什么會存在溢出問題呢,由于int型的數值范圍是 -2147483648~2147483647, 那么如果要翻轉 1000000009 這個在范圍內的數得到 9000000001,而翻轉后的數就超過了范圍。博主最開始的想法是,用 long 型數據,其數值范圍為 -9223372036854775808~9223372036854775807, 遠大于 int 型這樣就不會出現溢出問題。但實際上 OJ 給出的官方解答并不需要使用 long,一看比自己的寫的更精簡一些,它沒有特意處理正負號,仔細一想,果然正負號不影響計算,而且沒有用 long 型數據,感覺寫的更好一些,那么就貼出來吧:

解法一:

class Solution {
public:
    int reverse(int x) {
        int res = 0;
        while (x != 0) {
            if (abs(res) > INT_MAX / 10) return 0;
            res = res * 10 + x % 10;
            x /= 10;
        }
        return res;
    }
};

在貼出答案的同時,OJ 還提了一個問題 To check for overflow/underflow, we could check if ret > 214748364 or ret < –214748364 before multiplying by 10. On the other hand, we do not need to check if ret == 214748364, why? (214748364 即為 INT_MAX / 10)

為什么不用 check 是否等于 214748364 呢,因為輸入的x也是一個整型數,所以x的范圍也應該在 -2147483648~2147483647 之間,那么x的第一位只能是1或者2,翻轉之后 res 的最后一位只能是1或2,所以 res 只能是 2147483641 或 2147483642 都在 int 的范圍內。但是它們對應的x為 1463847412 和 2463847412,后者超出了數值范圍。所以當過程中 res 等于 214748364 時, 輸入的x只能為 1463847412, 翻轉后的結果為 2147483641,都在正確的范圍內,所以不用 check。

我們也可以用 long 型變量保存計算結果,最后返回的時候判斷是否在 int 返回內,但其實題目中說了只能存整型的變量,所以這種方法就只能當個思路擴展了,參見代碼如下:

解法二:

class Solution {
public:
    int reverse(int x) {
        long res = 0;
        while (x != 0) {
            res = 10 * res + x % 10;
            x /= 10;
        }
        return (res > INT_MAX || res < INT_MIN) ? 0 : res;
    }
};

到此,關于“C++實現LeetCode翻轉整數的方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

池州市| 大庆市| 西和县| 常州市| 龙游县| 九台市| 阿拉善左旗| 大余县| 盖州市| 华蓥市| 株洲县| 铁岭县| 宜宾市| 孙吴县| 团风县| 道真| 岳阳市| 石城县| 寻甸| 海伦市| 文登市| 石泉县| 临西县| 凌海市| 农安县| 临江市| 定远县| 义马市| 涟源市| 潜山县| 将乐县| 额济纳旗| 阿克| 广河县| 波密县| 腾冲县| 丰顺县| 开化县| 华宁县| 乐平市| 阳原县|