題目資訊
源地址:回文數
給你一個整數 x,如果 x 是一個回文整數,回傳 true;否則,回傳 false,
回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數,
例如,121 是回文,而 123 不是,
提示資訊
示例 1
輸入:x = 121
輸出:true
示例 2
輸入:x = -121
輸出:false
解釋:從左向右讀, 為 -121 , 從右向左讀, 為 121- ,因此它不是一個回文數,
示例 3
輸入:x = 10
輸出:false
解釋:從右向左讀, 為 01 ,因此它不是一個回文數,
提示
-2^31 <= x <= 2^31 - 1
實作邏輯
雙指標
比較簡單的思路就是,先將整數轉換成字串,然后使用首尾雙指標判斷所指位置的字符是否相同,直到所有的字符都被比較完畢,

如上圖所示,使用雙指標是比較直觀的一個思路,需要注意的就是,負整數都不是回文數,奇數和偶數在做回文判斷時有區別,
package cn.fatedeity.algorithm.leetcode;
public class PalindromeNumber {
public boolean answer(int x) {
if (x < 0) {
return false;
}
// 轉成字串
String s = Integer.toString(x);
// 雙指標判斷
int len = s.length();
for (int i = 0; i < len >> 1; i++) {
if (i != len - 1 - i && s.charAt(i) != s.charAt(len - 1 - i)) {
return false;
}
}
return true;
}
}
不轉換成字串
如果給這道題目加上不能將整數轉換為字串的限制,就需要在數學的角度上去思考其解決方案,
既然是想要判斷整數是否是回文,則可以直接將整數翻轉成另一個整數,再將這兩個整數做相等匹配,此方法的回圈次數相比雙指標更多,但卻沒有整數轉換成字串的耗時,整數效率更高一些,
package cn.fatedeity.algorithm.leetcode;
public class PalindromeNumber {
public boolean answer(int x) {
if (x < 0) {
return false;
}
// 將整數進行翻轉
int reverse = 0;
int rest = x;
while (rest >= 10) {
reverse = reverse * 10 + rest % 10;
rest = (int) (rest / 10.0);
}
return reverse * 10 + rest == x;
}
}
首發于翔仔的個人博客,點擊查看更多,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/499879.html
標籤:其他
上一篇:【線性DP】數字三角形
下一篇:水澤-資訊收集自動化工具安裝
