每日一题——回文数

题目描述

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

示例:

1
2
3
4
5
6
7
8
9
10
11
#1
输入: 121
输出: true
#2
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
#3
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

思路

  • 最好理解的一种解法就是先将 整数转为字符串 ,然后将字符串分割为数组,只需要循环数组的一半长度进行判断对应元素是否相等即可。
  • 类似前面的整数反转,将反转之后的数字与之前的作比较。

代码

PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* @param Integer $x
* @return Boolean
*/
# 方法一
function isPalindrome($x) {
return strrev($x) == $x; // 字符串反转
}
# 方法二
function isPalindrome($x) {
$n = $x;
$reverse = 0;
while ($n > 0) {
$reverse = $reverse * 10;
$reverse = $reverse + $n % 10; // 整数反转
$n = (int)($n/10);
}

return $x === $reverse;
}

Golang

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 方法一:整数转为字符串后前后比较
func isPalindrome(x int) bool {
if x < 0 {
return false
}

var str = strconv.Itoa(x)
for i := range str{
if str[len(str)-1-i] != str[i] {
return false
}
}
return true
}

// 方法二:整数反转与原始数字比较
func isPalindrome(x int) bool {
// 负数肯定不是回文
if x < 0 {
return false
}
// 记录下原始数字
originX := x
// 反转数字
rev := 0
for x != 0 {
pop := x % 10
x /= 10
rev = rev * 10 + pop
}
// 原始数字和反转数字对比
return originX == rev
}