1. 程式人生 > 其它 >python 多列表交集處理和sorted函式字串列表排序問題

python 多列表交集處理和sorted函式字串列表排序問題

技術標籤:力扣演算法leetcode

一、題目描述

給你一個 32 位的有符號整數 x ,返回 x 中每位上的數字反轉後的結果。

如果反轉後整數超過 32 位的有符號整數的範圍[−231,231− 1] ,就返回 0。

假設環境不允許儲存 64 位整數(有符號或無符號)。

二、示例

示例 1:

輸入:x = 123
輸出:321


示例 2:

輸入:x = -123
輸出:-321


示例 3:

輸入:x = 120
輸出:21


示例 4:

輸入:x = 0
輸出:0

三、輸入輸出說明

  • -2^{31} <= x <= 2^{31} - 1

四、基本思路

對於沒有大小限制的整數反轉的一般思路:(設原數為source,反轉之後的數為destination)

1)每次將source對10取餘

2)得到的餘數x加到10倍destination上,此操作相當於將destination在十進位制上向左移一位

3)將source除以10,此操作相當於將source在十進位制上向右移一位

4)終止條件為source == 0

由於整數除法是向下整除,所以對於負數也適用

由於本題加了限制“如果反轉後整數超過 32 位的有符號整數的範圍[−231,231− 1] ,就返回 0”,所以每次在步驟2)中需要判斷此時的destination是否超過最大值除以10

五、程式碼

int reverse(int x){
    int maxn = pow(2, 31) - 1;
    int minn = pow(-2, 31);
    int ans = 0;
    while (x != 0) {
        if (x > 0 && ans > maxn/10 || x < 0 && ans < minn/10) {
            return 0;
        }
        else {
            ans = ans * 10 + x % 10;
            x /= 10;
        }
    }
    return ans;
}