赞
踩
给你一个整数x,如果x是一个回文整数,返回true;否则返回false。回文数是指正序(从左向右)和倒序(从右到左)读都是一样的整数。
输入:x = 121
输出:true
输入:x = -121
输出:false
解释:从左向右读,为-121。从右向左读,为121-。因此它不是一个回文数。
输入:x = 10
输出:false
解释:从右向左读,为01。因此他不是一个回文数
1、将整数转换为字符串,然后用双指针遍历字符串,比较指针指向的元素。
class Solution {
public boolean isPalindrome(int x) {
String n = x + "";
int j = n.length() - 1;
int i = 0;
while (i < j){
if(n.charAt(i) != n.charAt(j)){
return false;
}
i++;
j--;
}
return true;
}
}
2、将整数转换为字符串,然后将字符串分割为数组,只需要循环数组的一行判断对应元素是否相等即可。
class Solution {
public boolean isPalindrome(int x) {
String n = x + "";
String m = (new StringBuffer(n)).reverse()
.toString();
if(m.equals(n)){
return true;
}
return false;
}
}
通过取整和取余操作获取整数中对应的数字进行比较。
举个例子:1221这个数字
- 通过计算1221、1000,得首位1
- 通过计算1221%10,可得末位
- 进行比较
- 再将22取出来继续比较
class Solution { public boolean isPalindrome(int x){ if(x < 0) return false; 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; x = (x % div) / 10; div /= 100; } return true; } }
将后半段数字进行翻转。
具体做法:
每次取余操作(%10),取出最低得数字:y = x % 10
将最低的数字加到取出数的末尾:revertNum = revertNum * 10 + y
每取一个最低位数字,x都要自除以10
判断x是不是小于revertNum,当它小于的时候,说明数字已经对半或过半了
最后,判断奇偶数的情况:如果是偶数的话,revertNum和x相等;如果是奇数的话,最中间的数字就在revertNum的最低位上,将它除以10以后应该和x相等
class Solution {
public boolean isPalindrome(int x) {
if(x < 0 || (x % 10 ==0 && x != 0))
return false;
int revertNumber = 0;
while(x > revertNumber) {
revertNumber = revertNumber * 10 + x % 10;
x /= 10;
}
return x == revertNumber || x == revertNumber / 10;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。