題目描述
判斷乙個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
示例 1:
輸入: 121
輸出: true
示例 2:
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是乙個回文數。
示例 3:
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是乙個回文數。
高階:
你能不將整數轉為字串來解決這個問題嗎?
做演算法就得想乙個難點例子,這問題思路不就慢慢來了嗎!!!!題解:
舉個例子說明一下唄:
首先,根據示例2可知,有負號就不能為回文數,那麼就可以知道
//邊界判斷
if(x <0)
那麼再解析一下題意唄,總體意思不就是拆分數字,將正著數的和倒著數的一 一對應唄!
那麼怎麼拆分啊,還能怎麼拆分啊?我們學的最簡單的不就是取餘和除法嗎?
那麼對1221取首位1221/1000=1 那麼我們的**可以讓x=1221代替,那麼1000又怎麼代替呢?
上**吧,這裡**看了就懂了。解釋起來有點麻煩了。
int div =1;
while
(x / div >=10)
首位取了,我們就開始取末尾了唄,那不就是1221%10=1,也就是x%10,這不就好了嗎?
那麼只剩下最後一步啦,之前首位都去了,我們是不是還得取一下中間值啊?
那麼怎麼取啊?還能怎麼辦呢?用個x/div是啥?知道嗎?
那x%div你總該知道吧?這個不就是取首位。
那x/div,不就把首位移除了唄!!!,再拿(x/div)%10不就把位數也給去掉了?
x =
(x % div)/10
;
中間位數得到了,我們是不是還得改一下我們用過的div啊?是不是得縮小一下啊?縮小多少呢?
這個x縮小兩位,div是不是也得仿照一下啊 ?
div /=
100
最後上一下總體**
總體**
public
class
main
}public
static
boolean
ispalindrome
(int x)
int div =1;
//為下面的x / div取首位做準備
while
(x / div >=10)
while
(x >0)
//去掉首位和末尾,/10肯定去掉末尾,再根據 int left = x / div取首位,可知x%div得到的值是去掉首位的全部
//如1221,的221數字
x =(x % div)/10
;//x去掉了兩位數,那麼div也得去掉兩位數唄,才能相匹配
div /=
100;
}return
true;}
}
每日一道演算法題 回文數(6 15)
判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例 1 輸入 121 輸出 true 示例 2 輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。示例 3 輸入 10 輸出 false 解釋 從右向左...
leetcode 回文數(簡單題)
判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。ps 你能不將整數轉為字串來解決這個問題嗎?一刷 時間複雜度o logn 空間複雜度o 1 但是這個解法最少迴圈1次最多迴圈1.5次,可以進行優化 class solution def ispalindrome ...
LeetCode 回文數 簡單題
判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例 1 輸入 121 輸出 true 示例 2 輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。示例 3 輸入 10 輸出 false 解釋 從右向左...