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));
}
}
上一篇: 微信网页授权
下一篇: 20.Valid Parentheses
推荐阅读
-
剑指Offer之判断一个数是否是回文数
-
Leetcode——Java判断回文数
-
回文数判断(Leetcode)
-
第二届战神杯线上编程挑战赛月赛第一题:回文数 博客分类: java java编程
-
第二届战神杯线上编程挑战赛月赛第一题:回文数 博客分类: java java编程
-
牛客网 对称平方数【回文数的判断 两个vector是否相等】
-
三重回文数问题E:三重回文数-分支循环小综合[中] 题目描述 判断整数m是否为三重回文数即它是否满足m、m的平方和m的立方均为回文数。 所谓回文数是指其各位数左右对称的数,例如121,676,9424
-
Java实现回文序列的判断
-
LeetCode题解(0367):判断是否为完全平方数(Python)
-
《java算法系列》回文数