1. 程式人生 > >LeetCode刷題:第七題 整數翻轉 第九題 回文數

LeetCode刷題:第七題 整數翻轉 第九題 回文數

num 值範圍 我們 family lee max 存儲 示例 bool

第七題題目描述:

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

示例 1:

輸入: 123
輸出: 321

示例 2:

輸入: -123
輸出: -321

示例 3:

輸入: 120
輸出: 21

註意:

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

代碼如下:

 1 int reverse(int x) {
 2     int temp = x, num = 0;
 3     while
(x) { 4 if (num > INT32_MAX / 10 || (num == INT32_MAX / 10 && (x % 10) > 7)) { 5 return 0; 6 } 7 if (num < INT32_MIN / 10 || (num == INT32_MIN / 10 && (x % 10) < -8)) { 8 return 0; 9 } 10 num = num * 10 + x % 10
; 11 x /= 10; 12 } 13 return num; 14 }

第九題題目描述:

判斷一個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。

示例 1:

輸入: 121
輸出: true

示例 2:

輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個回文數。

示例 3:

輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是一個回文數。

代碼如下:
 1 bool isPalindrome(int
x) { 2 int temp = x, num = 0; 3 while (x) { 4 if (x < 0) { 5 return false; 6 } 7 if (num > INT32_MAX / 10 || (num == INT32_MAX / 10 && x % 10 > 7)) { 8 return false; 9 } 10 if (num < INT32_MIN / 10 || (num == INT32_MIN / 10 && x % 10 < -8)) { 11 return false; 12 } 13 num = num * 10 + x % 10; 14 x /= 10; 15 } 16 return temp == num; 17 }

這兩道題都是整數翻轉相關,主要代碼就兩行:

1 num = num * 10 + x % 10;
2 x /= 10;

LeetCode刷題:第七題 整數翻轉 第九題 回文數