回文数
难度:
标签:
题目描述
给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,
121
是回文,而123
不是。
示例 1:
输入:x = 121 输出:true
示例 2:
输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
-231 <= x <= 231 - 1
进阶:你能不将整数转为字符串来解决这个问题吗?
代码结果
运行时间: 84 ms, 内存: 13.7 MB
/*
* 题目思路:
* 我们使用 Java Stream API 对整数进行处理。
* 首先,我们将数字转换为字符串,然后将其字符流化,反转流,
* 然后再将其连接成字符串并与原始字符串进行比较。
*/
import java.util.stream.IntStream;
public class PalindromeNumberStream {
public boolean isPalindrome(int x) {
String str = String.valueOf(x);
String reversedStr = IntStream.range(0, str.length())
.mapToObj(i -> str.charAt(str.length() - 1 - i))
.collect(StringBuilder::new, StringBuilder::append, StringBuilder::append)
.toString();
return str.equals(reversedStr);
}
}
解释
方法:
该题解的思路是先判断一些特殊情况,如果x为0则直接返回True;如果x为负数或者x的个位数为0则直接返回False。对于一般情况,创建一个列表a,通过循环取x的个位数添加到列表a中,并将x除以10。最后判断列表a和它的逆序是否相等,相等则说明x是回文数,返回True,否则返回False。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
为什么在判断`x`为负数或者`x`的个位数为0时,可以直接返回`False`?
▷🦆
为什么在判断列表`a`和它的逆序是否相等时,可以确定`x`是否为回文数?
▷🦆
如果不允许将整数转为字符串来解决这个问题,是否有其他方法可以判断一个整数是否为回文数?
▷