LeetCode演算法題目 7

2021-09-19 23:54:45 字數 1082 閱讀 9067

題目描述

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

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

解決方案

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

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

我的演算法如下,考慮補碼原碼轉換,不過沒有加上溢位判斷,並且在-2^31-1時會溢位。後續會除錯更新。

int reverse(int x)

int rev = 0;

while(z != 0)

else

rev = rev * 10 + pop;

}if(flag == 1)

y = rev>>31;

rev = (rev ^ y) - y; //取原碼

if(rev > 0xffffffff)

return 0;

else

return rev;

}

下面介紹另一種簡便演算法。

int reverse(int x)

return ret;

}

此方法會產生溢位由於該語句有可能造成int型別超限,故強制轉換ret為long。ong temp1 = ((long)ret*10) + x%10;該演算法思路很簡潔。

下面介紹標準演算法。

int reverse(int x)

return rev;

}

此演算法判斷溢位考慮到:max_value : 2147483647 min_value : -2147483648 。要判斷最後一位不要大於 7 和 不要小於-8。

另一種簡便演算法,利用long型別做運算,先反轉,最後判斷溢位。

int reverse(int x)

LeetCode演算法題目之7 整數反轉

給你乙個 32 位的有符號整數 x 返回 x 中每位上的數字反轉後的結果。如果反轉後整數超過 32 位的有符號整數的範圍 231,231 1 就返回 0。假設環境不允許儲存 64 位整數 有符號或無符號 數學 輸入 x 123 輸出 321 輸入 x 123 輸出 321 輸入 x 120 輸出 2...

leetcode題目7 整數反轉

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例1 輸入 123 輸出 321 示例2 輸入 123 輸出 321 示例3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數...

LeetCode演算法題目 3

給定乙個字串,找出其中不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3解釋 因為無重...