回文数

LeetCode每日一题,9.Palindrome Number

先看题目描述

大意就是给定一个整数,判断是否是回文数

算法和思路

这道题要做出来很简单,先判断给定整数是否小于 0,小于 0 直接返回 false,若大于 0,则将整数转化为字符串,并定义一个 left 指针和 right 指针,然后两个指针同时往中间移动,依次判断两个指针指向的字符是否相同即可

算法源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public boolean isPalindrome(int x) {
if (x < 0) return false;
String num = String.valueOf(x);
int left = 0;
int right = num.length() - 1;
while (left <= right) {
if (num.charAt(left) != num.charAt(right)) return false;
left++;
right--;
}
return true;
}
}

之后看题解,看到一个解法,感觉更好一些

以 1221 为例,

  • 通过计算 1221 / 1000, 得首位1
  • 通过计算 1221 % 10, 可得末位 1
  • 进行比较
  • 再将 22 取出来继续比较

按照这个思路就可以把代码实现,源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public boolean isPalindrome(int x) {
if (x < 0) return false;
int div = 1;
while(x / div >= 10) div *= 10;
while (x > 0) {
int left = x / div;
int right = x % 10;
if (left != right) return false;
x = (x % div) / 10;
div /= 100;
}
return true;
}
}