每日演算法題 整數反轉 簡單

2021-10-11 20:24:16 字數 1862 閱讀 6758

題目描述:

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

示例 1:

輸入: 123

輸出: 321

示例 2:

輸入: -123

輸出: -321

示例 3:

輸入: 120

輸出: 21

注意:

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

題解:首先進行數字反轉,我們第一時間想的肯定是,怎麼把數字拆分啊?回想一下所學的知識,用取餘就能取到數字 了唄。

取餘的過程:

123%10=3 、123/10=12

12%10=2 、12/10=1

1%10=1,

然後再拼接一下

3* 10 *10 =300

2 * 10 =20

相加不就等於321了嗎?

那麼如果數字長度再大一點呢?如果數字為負數呢?

那麼我們設一下傳過來的值為x

則取餘x%10,得來個引數接收一下吧設個res 吧。

那麼res =x%10

餘數知道了,是否就得將 餘數 * 10 * 你取餘幾次吧

那就得到res * 10 * 取餘次數

再者我們既然是取余到0為止,那麼為啥不設定乙個判斷條件呢?

就比如說while(x!=0)?

那麼根據這個判斷條件就可以知道取餘多少次了唄!!

那麼開始的肯定是:res=0, temp接收也為0;

temp = x%10 + res * 10 既 res =x%10 + res * 10

這裡的+號,代表拼接的意思啊。就比如上面的3*10+2 再迴圈一次就是3 * 10 *10 + 2 * 10 +1

那麼根據上面的分析還得在迴圈中加上 x/10

我們再看看題目:

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

什麼意思啊?

舉個簡單例子:

假設125處於int型的最大值,那麼反轉一下這521就出long型了,超出了範圍,就為整數溢位。

那麼根據這個例子是否可以知道最後返回的res可以根據這個整型和長整型判斷

由此可得

(int) res == res ? (int) res : 0;
最後看一下總體**

總體**

public

class

main

}public

static

intreverse

(int x)

//判斷是否溢位

//如果res溢位了,則為long型(這個是毋庸置疑的)

//按照下面的等式可知:

// 則你拿乙個(int)res這個強轉為int型的res 跟 res可能為long型,可能為int型的進行比較,

// 如果res為int型,那麼相等,則沒有溢位。如果res為long型,那麼則不相等,就溢位唄。

return

(int

) res == res ?

(int

) res :0;

}}

每日刷題 整數反轉

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例例 1 輸入 123 輸出 321 例 2 輸入 123 輸出 321 例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數。請根據這個假設,如果反轉後整數溢位那麼就返回 0。這道題思路簡...

演算法題 整數反轉

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 class solution def reverse self,x int int if x 0 new str s...

演算法題 整數反轉

給你乙個 32 位的有符號整數 x 返回 x 中每位上的數字反轉後的結果。如果反轉後整數超過 32 位的有符號整數的範圍 231,231 1 就返回 0。假設環境不允許儲存 64 位整數 有符號或無符號 示例 1 輸入 x 123 輸出 321 首先,我們先檢測向原整數附加另一位數字是否會導致溢位。...