Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

力扣题号9.回文数

问题描述:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。
示例 1:

输入:x = 121
输出:true
示例 2:

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

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

首先看到这个题首先想到的就是先将数字转为字符串,然后循环对比得出答案

转化字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public boolean isPalindrome(int x) {
if (x < 0){
return false;
}
if (x == 0){
return true;
}
if (x % 10 == 0){
return false;
}
char[] chars = String.valueOf(x).toCharArray();
for (int i = 0; i < chars.length / 2 ; i++) {
if (chars[i] != chars[chars.length - i -1]){
return false;
}
}
return true;

整数解法

当然不能够仅仅满足于做这个题,要寻求更佳的解法

思路

  • 首先不作转换,就是用数字
  • 负数直接不可能为回文数
  • 0直接返回true
  • 如果是正数,则将他的倒序数值算出(取余)然后和原数比较是否相等
不转化字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public boolean isPalindrome(int x) {
if (x == 0){
return true;
}
if (x < 0 || x % 10 == 0){
return false;
}
int num = x;
int result = 0 ;
while (num!=0){
result = result * 10 + num % 10;
num = num / 10;
}
return result == x;
}
}

评论