[LeetCode - 數學] 7. Reverse Integer

1 題目

Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321

2 分析

本題的解決主要依靠存在的數學關係:令 num 表示任意數字,那麼

  • num % 10 表示 num 的最後一位數字
  • num / 10 表示 num 去掉最後一位數字的值

根據上面的規律,可以把給定的數字逐位的進行上述運算, 求出 reverse number, 僞代碼如下:

  • 初始化res = 0,表示要求的數值
  • 初始化sign = 1, 表示給定的數字的正負,如果爲負,sign = -1
  • 執行以下循環,循環的終止條件是 num = 0num表示題目給定的數字的絕對值:
    • 判斷res是否溢出,判斷方法爲INT_MAX / 10 < res || (INT_MAX - num % 10) < res * 10,其中INT_MAX表示32位有符號整數的最大值,前一個條件判斷 res*10是否溢出, 後一個條件判斷 res*10 + num%10 是否溢出:
      • 如果是,則終止循環,返回0
      • 如果否,則繼續循環計算
    • res = res * 10 + num % 10
    • num = num / 10

sign * num作爲返回值返回
算法的時間複雜度爲O(n) , n 爲給定的數字的位數。

3 代碼[1]

class Solution {
public:
    int reverse(int x) {
        int sign = x < 0 ? -1 : 1;
        x = abs(x);
        int res = 0;
        while (x > 0) {
            if (INT_MAX / 10 < res || (INT_MAX - x % 10) < res * 10) {
                return 0;
            }
            res = res * 10 + x % 10;
            x /= 10;
        }
        return sign * res;
    }
};

[1]代碼來源:https://discuss.leetcode.com/topic/6104/my-accepted-15-lines-of-code-for-java/3

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