回文数的golang实现
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数
输入:
输出: true
输入: -
输出: false
解释: 从左向右读, 为 - 。 从右向左读, 为 - 。因此它不是一个回文数。
输入:
输出: false
解释: 从右向左读, 为 。因此它不是一个回文数。
首先分析题意,只要正序读与反序读时一样的,那就是回文数,那么负数就可以排除掉。
首先我们能想到的就是把整数转成字符串,然后比较字符串的第一位与最后一位、第二位与倒数第二位。。。以此类推,只要有不一样的就返回false
func isPalindrome(x int) bool {
if x < {
return false
}
s := strconv.Itoa(x)//把整数转成字符串
for i, j := , len(s)-; i < j; i, j = i+, j- {
if s[i] != s[j] {
return false
}
}
return true
}
当然我们也可以不转成字符串来比较,那就有点麻烦,我们要借助一些容器,比如slice,首先我们要把整数每一位都拿出来:
var is []int
var i float64 = for x != {
temp := x % int(math.Pow(, i)) / int(math.Pow(, i-))//这里取余数的时候要注意去到20、100类似的数据,所以要再进行一次取模
x -= temp * int(math.Pow(, i-))
i++
is = append(is, temp)
}
拿到保存着每一位数字的slice之后的比较就跟字符串的比较一样了:
for o, p := , len(is)-; o < p; o, p = o+, p- {
if is[o] != is[p] {
return false
}
}
return true
整体不用转成字符串的代码:
func isPalindrome(x int) bool {
if x < {
return false
}
var is []int
var i float64 =
for x != {
temp := x % int(math.Pow(, i)) / int(math.Pow(, i-))
x -= temp * int(math.Pow(, i-))
i++
is = append(is, temp)
}
for o, p := , len(is)-; o < p; o, p = o+, p- {
if is[o] != is[p] {
return false
}
}
return true
}
我们再来比较一下两种方法:
- 首先转字符串的代码量较少(手动狗头)
- 其次时间复杂度:
- 转字符串:O(N/2)
- 不转字符串:O(N+N/2)
- 空间复杂度:
- 转字符串:O(N)
- 不转字符串:O(2N)
比较下来,还是转字符串的好
还有一种方法从LeetCode上看到:
func isPalindrome3(x int) bool {
// 特殊情况:
// 当 x < 0 时,x 不是回文数。
// 同样地,如果数字的最后一位是 0,为了使该数字为回文,
// 则其第一位数字也应该是 0
// 只有 0 满足这一属性
if x < || (x% == && x != ) {
return false
}
revertedNumber :=
for x > revertedNumber {
revertedNumber = revertedNumber* + x%
x /=
}
// 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。
// 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,
// 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
return x == revertedNumber || x == revertedNumber/
}
回文数的golang实现的更多相关文章
- LeetCode Golang 9.回文数
9. 回文数 第一种办法 :itoa 转换为字符串进行处理: package main import ( "strconv" "fmt" ) //判断一个整数是 ...
- hdu1282回文数猜想
Problem Description 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数.任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其 ...
- C语言 · 特殊回文数
问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n . 输入格式 输入一行,包含一个正整数n. 输 ...
- Java判断回文数算法简单实现
好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...
- luogu1207双重回文数[usaco1.2]Dual Palindromes
题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321就是一个回文数,而77778就不是.当然,回文数的首和尾都应是非零的,因此0220就不是回文数. 事实上 ...
- luogu10125回文数[noip1999 Day1 T1]
题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数 ...
- 洛谷 P1015 回文数 Label:续命模拟QAQ
题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数 ...
- 2016中国大学生程序设计竞赛(长春)-重现赛 1010Ugly Problem 回文数 模拟
Ugly Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- 回文数 第N个回文数
判断回文数还是不难,如果能转为字符串就更简单了. 如果是求第N个回文数呢. 12321是一个回文数,这里先考虑一半的情况. 回文数的个数其实是有规律的.如: 1位回文数: 9个 2位回文数: 9个 3 ...
随机推荐
- apache log4j打印日志源码出口
Throwable.class: public void printStackTrace(PrintStream s) { synchronized (s) { s.println(this); St ...
- 5步搭建GO环境
Easy Go Programming Setup for Windows Dec 23, 2014 I’ve had to do this more than once recently, so I ...
- Jquery闪烁提示特效
样式:.red{ border:1px solid #d00; background:#ffe9e8; color:#d00;} function shake(ele,cls,times){ var ...
- Java框架之Spring(二)
前一篇博客讲述了Spring的一些基础概念,下面我们来创建第一个Spring程序吧. 步骤如下: 1) 导包 2) 配置文件 附没有提示的情况 MyEclipse ->File and Edit ...
- 【JVM】6、聊聊JVM常用参数设置
整体考虑堆大小 -Xms3550m, 初始化堆大小.通常情况和-Xmx大小设置一样,避免虚拟机频繁自动计算后调整堆大小. -Xmx3550m,最大堆大小. 考虑分代设置堆大小 首先通过jstat等工具 ...
- Clock Pictures(kmp + Contest2075 - 湖南多校对抗赛(2015.04.26))
Problem H: Clock Pictures Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 73 Solved: 18[Submit][Stat ...
- 设计模式之策略模式(Strategy)
策略模式将不同算法的逻辑抽象接口封装到一个类中,通过组合和多态结合的方式来进行不同算法具体的实现. 作用 策略模式是一种定义一系列算法的方法,Strategy类层次为Context定义了一系列的可重用 ...
- pygame编组(精灵组)Group中的常用方法介绍
说明: 1.以下所用的Group均为Group类的对象实例 2.Group类是对AbstractGroup类的继承 sprite.py文档中描述如下: class Group(AbstractGrou ...
- 1788:Pell数列
1788:Pell数列 查看 提交 统计 提问 总时间限制: 3000ms 内存限制: 65536kB 描述 Pell数列a1, a2, a3, ...的定义是这样的,a1 = 1, a2 = 2 ...
- loadsh常用函数
此篇文章会记录常用的lodash函数 防抖函数:_.debounce() 创建一个去缓冲函数,该函数将自上次调用函数以来经过设置的等待毫秒后调用func. 去缓冲函数带有一个取消方法来取消延迟的fun ...