题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
解题思路1:回文串的概念大家都是熟悉的了,121,1221都是回文串,首先考虑这么一个思路,它读进来的是一个数字,所以负数肯定不是回文串,这里可以做一个判断,对所有负数返回false,然后使用额外的数组,对数字进行拆分,随后进行回文串的判定。
public boolean isPalindrome(int x) {
if(x<0)
return false;
ArrayList<Integer>arr = new ArrayList<>();
while(x!=0){
int flag=x%10;
arr.add(flag);
x/=10;
}
for(int i=0;i<arr.size();i++){
if(arr.get(i)!=arr.get(arr.size()-1-i))
return false;
}
return true;
}
解题思路2:但是解题思路1的一个弊端是它需要维护一个额外的数组空间,即使这个数组可能很小,那我们思考一下有没有什么方法可以不使用额外的数组,我们从回文的定义出发,发现如果将回文从中间切开,并将后半部分翻转,若它是一个回文串,那么翻转后两边必相等。
public boolean isPalindrome(int x) {
if(x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}//如果是负数,则一定不是回文数,如果数字是10的倍数,那么只有0符合条件。
int y=0;
while(x>y){
y=y*10+x%10;
x/=10;
}
if(x == y||x==y/10)//输入回文数是奇数,则去除y的最后一位数字,因为奇数位和自己对称,直接去除不影响最后结果
return true;
else
return false;
}
网友评论