题目描述:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
go代码实现
package main
import (
"fmt"
"strconv"
)
/*
方案一:将数字逆转后,与原数字比较
*/
func JudgeReverse1(num int) bool {
if num < 0 {
return false
} else if num < 10 {
return true
} else {
num1 := num
var result int
for num1 != 0 {
result = 10 * result + num1 % 10
num1 /= 10
}
return num == result
}
}
/*
方案二:基于方案一,进一步优化,只逆转一半,在将两边比较
如1221,比较12和12
12321,比较12和123
*/
func JudgeReverse2(num int) bool {
if num < 0 {
return false
} else if num < 10 {
return true
} else {
var result int
for num > result {
result = 10 * result + num % 10
num /= 10
}
return num == result || num == result / 10
}
}
/*
方案三:先将数字转为字符串,再逆转字符串比较
*/
func JudgeReverse3(num int) bool {
s := strconv.Itoa(num)
runes := []rune(s)
for from, to := 0, len(runes)-1; from < to; from, to = from+1, to-1 {
runes[from], runes[to] = runes[to], runes[from]
}
return s == string(runes)
}
func main() {
a, b, c := 1, -121, 123321
fmt.Println(JudgeReverse1(a))
fmt.Println(JudgeReverse1(b))
fmt.Println(JudgeReverse1(c))
fmt.Println(JudgeReverse2(a))
fmt.Println(JudgeReverse2(b))
fmt.Println(JudgeReverse2(c))
fmt.Println(JudgeReverse3(a))
fmt.Println(JudgeReverse3(b))
fmt.Println(JudgeReverse3(c))
}
运行结果:
GOROOT=C:\Go #gosetup
GOPATH=F:\goPath #gosetup
C:\Go\bin\go.exe build -o C:\Users\windows10\AppData\Local\Temp\___go_build_reverse_go.exe F:/code/test/reverse/reverse.go #gosetup
C:\Users\windows10\AppData\Local\Temp\___go_build_reverse_go.exe #gosetup
true
false
true
true
false
true
true
false
true
Process finished with exit code 0
网友评论