回文数的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 ...
随机推荐
- 扩展方法IEnumerable<T>转换为IList<SelectListItem> ,提供@Html.DropDownList使用
由于在MVC中经常会使用到@Html.DropDownList方法,而该方法接收的是List<SelectListItem> 参数,因此就想着写一个扩展方法,直接把IEnumerable转 ...
- 基于vue框架手写一个notify插件,实现通知功能
简单编写一个vue插件,当点击时触发notify插件,dom中出现相应内容并且在相应时间之后清除,我们可以在根组件中设定通知内容和延迟消失时间. 1. 基础知识 我们首先初始化一个vue项目,删除不需 ...
- 自动化运维(2)之一键式单实例安装MySQL
ZMySQLAutoTools文档 目标:自动化构建部署MySQL数据库,一键式单实例mysql安装,备份,监控,主从集群部署等.以及jdk,tomcat,nginx等基础中间件的自动化部署安装及运维 ...
- java中Map集合的理解
Map |--Hashtable:底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.jdk1.0.效率低. |--HashMap:底层是哈希表数据结构,允许使用 null 值和 ...
- [译]WebAPI下的如何实现参数绑定
本文将概述在WebAPI方式下将如何将参数绑定到一个action方法,包括参数是如何被读取,一系列规则决定特定环境采用的那种绑定方式,文章最后将给出一些实际的例子. Parameter binding ...
- [PHP] 数据结构-循环链表的PHP实现
1.将单链表中终端结点的指针端由空指针改为指向头结点,单循环链表,循环链表和单链表的主要差异就在于循环的判断条件上原来是判断p->next是否为空,现在则是p->next不等于头结点,则循 ...
- ios -- 成员变量、实例变量与属性的区别
最近打开手机就会被胡歌主演的<猎场>刷屏,这剧我也一直在追,剧中的郑秋冬,因为传销入狱五年,却在狱中拜得名师孙漂亮(孙红雷),苦学HR,并学习了心理学,成功收获两样法宝.出狱后因为怕受 ...
- vi命令详解2
介绍 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令. 1.vi的基本概念 vi可以分为三种状态,分别如下: ...
- power of the test
https://www.youtube.com/watch?v=UApFKiK4Hi8
- echarts2.0仪表盘
option = { backgroundColor: '#0e0b2a', tooltip : { formatter: "{a} <br/>{b} : {c}%" ...