回文数
- 题目
- 基本思路
- 代码实现
题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
基本思路
- 方法一:转化为字符串,然后直接反转对比原始字符串和反转后的字符串
- 方法二:长度为n的字符串,取出索引为0和n-1,1和n-2 …的索引对应的数字对比,不同则返回false。
- 方法三:题解提供的最简单方法,直接取后半段的数字反转后与前半段对比,关键部分在于判断截取下来的部分是否已经截取过半,因此需要判断截取后的数字与前半段数字的大小关系。
代码实现
方法一二
package com.immunize.leetcode.isPalindrome1;/*** 方法二* * @author Mr IMMUNIZE**/
public class Solution {public boolean isPalindrome(int x) {/** 方法一:* * return (x + "").equals((new StringBuilder(x + "")).reverse().toString());*/if (x < 0)return false;// 获取当前x的位数int div = 1;while (x / div >= 10) {div *= 10;}while (x > 0) {// 最高位int left = x / div;// 最低位int right = x % 10;if (left != right)return false;// 去掉最高位和最低位后的xx = (x % div) / 10;// 因为去掉了2位数,所以被除数div也要少2位div /= 100;}return true;}
}
方法三
package com.immunize.leetcode.isPalindrome1;/*** 方法三:* * @author Mr IMMUNIZE**/
public class Solution {public boolean isPalindrome(int x) {if (x < 0 || (x % 10 == 0 && x != 0))return false;int Rx = 0;// x每次去除最低位while (x > Rx) {Rx = Rx * 10 + x % 10;x /= 10;}// 偶数则相等,奇数x则等于截取数字去掉最后一位。return x == Rx || x == Rx / 10;}
}