1. 題目描述:
判斷一個(gè)整數(shù)是否是回文數(shù)》镉牛回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)报腔。
示例 1:
輸入: 121
輸出: true
示例 2:
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 认烁。因此它不是一個(gè)回文數(shù)肿男。
示例 3:
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是一個(gè)回文數(shù)却嗡。
2.算法思路:
我們可以把整數(shù)本身反轉(zhuǎn)舶沛,將反轉(zhuǎn)后的數(shù)字和原始整數(shù)進(jìn)行比較,如果相同就是回文數(shù)窗价。但是如庭,如果反轉(zhuǎn)后的數(shù)字大于INT_MAX,就需要我們考慮整數(shù)溢出問題撼港。所以坪它,為什么不反轉(zhuǎn)整數(shù)的一半呢骤竹?如果是回文數(shù),反轉(zhuǎn)后的后半部分應(yīng)該和原始數(shù)字的前半部分相同往毡。
那么問題來了蒙揣,怎么知道反轉(zhuǎn)到原始整數(shù)的一半了呢?當(dāng)原始整數(shù) x <= 反轉(zhuǎn)后的整數(shù) temp時(shí)开瞭。
由示例2可知懒震,當(dāng) x < 0 時(shí),返回 false 嗤详;當(dāng) x = 0 時(shí)个扰,返回 true;
當(dāng) x > 0 時(shí)葱色,分為 x 是奇數(shù)位和 x 是偶數(shù)位递宅。
當(dāng) x 是奇數(shù)位的正整數(shù)時(shí),把 temp / 10 以除去原始整數(shù)的中間位即可冬筒;當(dāng) x 是偶數(shù)位的正整數(shù)時(shí)恐锣,反轉(zhuǎn) x 的一半茅主,與 原始整數(shù)的前半部分比較即可舞痰。
3.實(shí)現(xiàn)過程(C):
bool isPalindrome(int x){
int temp = 0;
if(x < 0||(x % 10 == 0 && x != 0)){
return false;
}
if(x == 0){
return true;
}
while(x > temp){
temp = temp * 10 + x % 10;
x = x / 10;
}
if(temp == x||x == temp/10){
return true;
}else{
return false;
}
}
4.復(fù)雜度分析
時(shí)間復(fù)雜度:O(
),對(duì)于每次迭代诀姚,我們會(huì)將輸入除以10响牛,因此時(shí)間復(fù)雜度為O(
)。
空間復(fù)雜度:O(1)赫段。
5.提交記錄
9.提交記錄.png