問題描述
- 給你一個整數 x ,如果 x 是一個回文整數,傳回 true ;否則,傳回 false 。
- 回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
例如,121 是回文,而 123 不是。
來源:力扣(LeetCode)
連結:https://leetcode.cn/problems/palindrome-number
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
思路
按照題目的邏輯,我們很容易想到的就是用兩個指針分别指向首、尾元素,判斷所指元素是否相等,然後指針分别向後移與向前移。現在的問題在于,題目給的參數為int型,如果要實作上述操作,那操作對象就需要是數組或字元串形式。我們這裡選取字元串來進行操作
将int轉換為String類型方法:
法1:String str = String.valueOf(x);
法2:String s = Integer.toString(x);
x為int型的變量,我們通過使用valueOf或toString都能達到我們的目的
第一步完成之後,我們就可以直接完成代碼了
核心代碼
public static boolean isPalindrome(int x) {
String str = String.valueOf(x);
//String s = Integer.toString(x);
int n = str.length();
for (int i = 0, j = n - 1; i < str.length() / 2; i++, j--) {
if(str.charAt(i) != str.charAt(j)){
return false;
}
}
return true;
}
代碼解釋
i用于從前往後周遊,j從後往前周遊,然後逐次比較二者所指的元素,隻要出現一對不相等,那我們就可以直接return false;如果循環結束都沒有進入if語句,那就證明是回文數,我們直接return true。
注:此處的循環結束條件并不是str.length,觀察回文數我們可以知道,回文數是關于中間那一個元素(n為奇數)或關于中間那一對(n為偶數)對稱的,是以我們隻要周遊到中間就好
如:12321(奇)、123321(偶)
運作效果

擴充思路
還有一種辦法就是我們對x進行逆序操作,然後判斷逆序後的x與原來的x是否相等即可,Java有一個StringBuffer類,裡面有一個reverse方法,可以完成逆序操作。核心代碼如下:
public static boolean isPalindrome_reverse(int x) {
String str = Integer.toString(x);//将x轉換為字元串
StringBuffer re = new StringBuffer(str);
String s = re.reverse().toString();//完成逆序,并且轉換為String類型
if (str.equals(s)){
return true;
}else{
return false;
}
}
運作效果
對比兩個方法占用的時間與空間,我們可以看出,二者都差不多,大家選一個自己習慣的或者容易了解的方法就行
完整源代碼
package com.practice;
public class Palindrome_number {
public static void main(String[] args) {
int x = 123321;
System.out.println(isPalindrome(x));
System.out.println(isPalindrome_reverse(x));
}
public static boolean isPalindrome_reverse(int x) {
String str = Integer.toString(x);//将x轉換為字元串
StringBuffer re = new StringBuffer(str);
String s = re.reverse().toString();//完成逆序,并且轉換為String類型
if (str.equals(s)){
return true;
}else{
return false;
}
}
public static boolean isPalindrome(int x) {
String str = String.valueOf(x);
int n = str.length();
for (int i = 0, j = n - 1; i < str.length() / 2; i++, j--) {
if (str.charAt(i) != str.charAt(j)) {
return false;
}
}
return true;
}
}