回文数
一、题目
9. 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数(如果一个整数向前和向后读都相同,则它是一个 回文数。 例如,121 是回文数,而 123 不是。)
是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
进阶:你能不将整数转为字符串来解决这个问题吗?
二、题解
题解一(双指针)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public static boolean isPalindrome(int x) { if (x < 0) { return false; } String str = x + ""; char[] charArray = str.toCharArray(); int i = 0, j = charArray.length - 1; while (i < j) { char pre = charArray[i]; char post = charArray[j]; if (post != pre) { return false; } i++; j--; } return true; } }
|

题解一(中分法)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution { public static boolean isPalindrome(int x) { if (x < 0 || (x % 10 == 0 && x != 0)) { return false; } String str = x + ""; int length = str.length(); String preCharArr; String postCharArr; if (length % 2 != 0) { preCharArr = str.substring(0, (length - 1) / 2); postCharArr = str.substring(((length - 1) / 2) + 1); } else { preCharArr = str.substring(0, length / 2); postCharArr = str.substring(length / 2); } StringBuilder stringBuilder = new StringBuilder(postCharArr); stringBuilder.reverse(); return preCharArr.contentEquals(stringBuilder); } }
|

题解三(反转一半数字,力扣官方题解)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Solution { public boolean isPalindrome(int x) { if (x < 0 || (x % 10 == 0 && x != 0)) { return false; }
int revertedNumber = 0; while (x > revertedNumber) { revertedNumber = revertedNumber * 10 + x % 10; x /= 10; }
return x == revertedNumber || x == revertedNumber / 10; } }
|

三、总结
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| package com.loltoulan.str;
public class IsPalindrome {
public static void main(String[] args) { System.out.println(isPalindrome(1125211)); }
public static boolean isPalindrome1(int x) { if (x < 0 || (x % 10 == 0 && x != 0)) { return false; } String str = x + ""; char[] charArray = str.toCharArray(); int i = 0, j = charArray.length - 1; while (i < j) { char pre = charArray[i]; char post = charArray[j]; if (post != pre) { return false; } i++; j--; } return true; }
public static boolean isPalindrome2(int x) { if (x < 0 || (x % 10 == 0 && x != 0)) { return false; } String str = x + ""; int length = str.length(); String preCharArr; String postCharArr; if (length % 2 != 0) { preCharArr = str.substring(0, (length - 1) / 2); postCharArr = str.substring(((length - 1) / 2) +1); } else { preCharArr = str.substring(0, length / 2); postCharArr = str.substring(length / 2); } StringBuilder stringBuilder = new StringBuilder(postCharArr); stringBuilder.reverse(); return preCharArr.contentEquals(stringBuilder); }
public static boolean isPalindrome(int x) { if (x < 0 || (x % 10 == 0 && x != 0)) { return false; }
int revertedNumber = 0; while (x > revertedNumber) { revertedNumber = revertedNumber * 10 + x % 10; x /= 10; }
return x == revertedNumber || x == revertedNumber / 10; } }
|