91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

米泉市| 平凉市| 甘肃省| 界首市| 同仁县| 澄城县| 湘潭县| 舟山市| 峨山| 临沂市| 南皮县| 略阳县| 奉贤区| 平度市| 屏山县| 泸西县| 台中县| 白沙| 康平县| 菏泽市| 临湘市| 台前县| 平和县| 莆田市| 兴安盟| 沙田区| 宜兰县| 武穴市| 湖州市| 永寿县| 巫溪县| 孙吴县| 诸城市| 锡林浩特市| 南充市| 绥滨县| 德阳市| 视频| 永兴县| 库车县| 奉化市|