Leetcode題解之字串(2)顛倒整數

2021-08-31 18:26:38 字數 1484 閱讀 7856

題目:

題目描述:

顛倒整數

給定乙個 32 位有符號整數,將整數中的數字進行反轉。

示例 1:

輸入:123輸出:321
示例 2:

輸入:-123輸出:-321
示例 3:

輸入:120輸出:21
注意:假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−2^31,  2^31 − 1]。根據這個假設,如果反轉後的整數溢位,則返回 0。

思路:第一種思路。利用和反轉字串的思路。先將所有字串反轉,然後判斷是否以0為結尾。把0消除就好。其次就是反轉後末尾帶 『-』 的問題。這裡我只想到用另乙個大小為原陣列小1的char 陣列,去複製。剛好最後一位為'-'號被拋去。返回-b就可以獲得正解。至於反轉後溢位我沒考慮。。。

第二種思路。利用入棧出棧的思考方法。

方法:彈出和推入數字 & 溢位前進行檢查

思路

我們可以一次構建反轉整數的一位數字。在這樣做的時候,我們可以預先檢查向原整數附加另一位數字是否會導致溢位。

演算法

反轉整數的方法可以與反轉字串進行模擬。

我們想重複「彈出」 xx 的最後一位數字,並將它「推入」到 \textrev 的後面。最後,\textrev 將與 xx 相反。

要在沒有輔助堆疊 / 陣列的幫助下 「彈出」 和 「推入」 數字,我們可以使用數學方法。

//pop operation:

pop = x % 10;

x /= 10;

//push operation:

temp = rev * 10 + pop;

rev = temp;

但是,這種方法很危險,因為當 temp = rev * 10 + pop;時會導致溢位。

幸運的是,事先檢查這個語句是否會導致溢位很容易。

為了便於解釋,我們假設 rev 是正數。

當 rev 為負時可以應用類似的邏輯。

呃。。我還能說什麼....這兩個方法,乙個天,乙個是地啊。

//解法1

class solution

}if(ch[len-1]=='-')

return rev;}}

Leetcode題解之字串(8) 報數

題目 題目描述 1.1 2.11 3.21 4.1211 5.111221 6.312211 7.13112221 8.1113213211 9.311312111312211被讀作 one 1 乙個一 即11。11被讀作 two 1s 兩個一 即21。21被讀作 one 2 one 1 乙個二 乙...

Leetcode題解之字串(5) 驗證回文字串

題目 題目描述 給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true示例 2 輸入 race a car 輸出 false思路 先把字母都轉換...

題解2 Supper字串

基本思路 為了簡便,先把整個字串對應的字母都換成大寫或小寫,然後對每乙個出現的字母進行記錄次數,把最大的那個次數求出來,乘以2與n進行比較,滿足條件則直接輸出,否則n 進行判斷,最後將符合條件的輸出。ac include include using namespace std intmain for...