欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Leetcode——Java判断回文数

程序员文章站 2024-03-22 16:18:34
...

 

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

示例 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));
}
}