判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true

示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

方法1:将int类型转换为字符串判断

import java.util.Scanner;

/**
 * 判断是否是回文数 方法1:将int类型转换为字符串判断
 * 
 * @author 86176
 *
 */
public class Palindrome {
	public static void main(String[] args) {
		System.out.println("请输入:");
		Scanner scanner = new Scanner(System.in);
		int x = scanner.nextInt();
		if (x <= 0) {
			System.out.println("不是回文数");
		} 
	    String a=String.valueOf(x);
	    for(int i=0;i<a.length()/2;i++) {
	    	if(a.charAt(i)!=a.charAt(a.length()-i-1)) {
	    		System.out.println("不是回文数");
			}else {
			System.out.println("是回文数");
			}
		}
	}

}

输出:
请输入:
121
是回文数
请输入:
123
不是回文数
请输入:
-121
不是回文数
/**
 * 将int型转换成字符串型判断
 */
import java.util.Scanner;

class Solution1 {
	 public static  boolean isPalindrome(int x) {
	        //小于0,直接返回
	        if(x<0){
	            return false;
	        }
	        String c=String.valueOf(x);
	        int length=c.length();
	        int i=0;
	        boolean result =true;
	        while(i<length/2){
	            if(c.charAt(i)!=c.charAt(length-i-1)){
	                result=false;
	                //如果有一个不相同就跳出循环
	                break;
	            }
	            i++;
	        }
	        return result;
	    }
	 public static void main(String[] args) {
		 System.out.println("请输入:");
			Scanner scanner = new Scanner(System.in);
			int x = scanner.nextInt();
			System.out.println(isPalindrome(x));
	}
}

方法2:使用堆栈

首先,我们应该处理一些临界情况。所有负数都不可能是回文,例如:-123 不是回文,因为 - 不等于 3。所以我们可以对所有负数返回 false。

现在,让我们来考虑如何反转后半部分的数字。 对于数字 1221,如果执行 1221 % 10,我们将得到最后一位数字 1,要得到倒数第二位数字,我们可以先通过除以 10 把最后一位数字从 1221 中移除,1221 / 10 = 122,再求出上一步结果除以10的余数,122 % 10 = 2,就可以得到倒数第二位数字。如果我们把最后一位数字乘以10,再加上倒数第二位数字,1 * 10 + 2 = 12,就得到了我们想要的反转后的数字。 如果继续这个过程,我们将得到更多位数的反转数字。

现在的问题是,我们如何知道反转数字的位数已经达到原始数字位数的一半?

我们将原始数字除以 10,然后给反转后的数字乘上 10,所以,当原始数字小于反转后的数字时,就意味着我们已经处理了一半位数的数字。

/**
 * 方法2:使用堆栈
 * 将结果保存到一个队列中,一个栈中
 */
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;

public class Solution3 {
public static boolean isPalindrome(int x) {
	if(x<0) {
		return false;
	}
	if(x<10) {
		return true;
	}
	
	Stack stack=new Stack();
	Queue queue=new LinkedList();
	while(x!=0) {
		int value=x%10;
		stack.push(value);
		queue.offer(value);
		x=(x-value)/10;
	}
	while(!stack.isEmpty()) {
		//出栈最后一个和队列第一个比较
		if(stack.pop()!=queue.poll()) {
			return false;
		}
	}
	return true;
}
public static void main(String[] args) {
	 System.out.println("请输入:");
		Scanner scanner = new Scanner(System.in);
		int x = scanner.nextInt();
		System.out.println(isPalindrome(x));
}
}