设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 6144|回复: 5
打印 上一主题 下一主题

回文数答案

[复制链接]

3

主题

0

好友

29

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2013-8-18 09:59:55 |只看该作者 |倒序浏览
俩方法:
#!/bin/env python
def juge(x):
    x = str(x)
    last_i = int(len(x) - 1)
    xh = int(len(x) / 2)
    key = True
    for i in xrange(xh):
        if x[i] != x[last_i - i]:
            key = False
            break
    return key
re = []
def juge2(x):
    x = str(x)
    r_x = x[::-1]
    if x == r_x:
        return True
    else:
        return False
import time
st = time.time()
for l in xrange(201):
    if juge(l * l):
        re.append(l)
print re
et = time.time()
print et - st
re2=[]
st = time.time()
for l in xrange(201):
    if juge2(l * l):
        re2.append(l)
print re2
et = time.time()
print et - st

回复

使用道具 举报

3

主题

0

好友

29

积分

新手上路

Rank: 1

沙发
发表于 2013-8-18 10:01:44 |只看该作者
第一种方法的思路是因为回文数的个数总为奇数个,我以中间为分割,以此对比。
第二种方法的思路是根据老师思路里面那个正念,反念一致的特性,做了一个反转。

大家一起学习下,看看还有没有其他更加牛逼的方法。一起学习
回复

使用道具 举报

0

主题

0

好友

12

积分

新手上路

Rank: 1

板凳
发表于 2013-8-18 12:15:14 |只看该作者
for num in range(0, 20000):
    origin = num*num
    revers = int(''.join((str(origin))[::-1]))
    if revers == origin:
        print origin

如果是刷ACM的题的话,我这种解法效率肯定过不去,但从Python的角度来看还是…略显简洁。。
回复

使用道具 举报

0

主题

0

好友

12

积分

新手上路

Rank: 1

地板
发表于 2013-8-18 12:17:39 |只看该作者
嗯,跟第二种差不多,只是我还多了转换成整数这一步。学习了。
BTW,楼主是搞ACM的吧…
你的代码风格有浓浓的C的味道
回复

使用道具 举报

0

主题

0

好友

58

积分

注册会员

Rank: 2

5#
发表于 2013-8-18 13:06:38 |只看该作者
受楼主启发我也用了 import time,方法和楼主第二个一样。
  1. import time

  2. startTime = time.time()

  3. palindromeList = []

  4. for i in range(0,200):
  5.     num = i*i
  6.     numStr = str(num)
  7.     if numStr == numStr[::-1]:
  8.         palindromeList.append(i)

  9. for j in palindromeList:
  10.     # print "{0}".format(j),
  11.     print "%d," % j,

  12. endTime = time.time()

  13. print # print new line
  14. print "The time used: %e seconds" % (endTime - startTime)
复制代码
结果:
0, 1, 2, 3, 11, 22, 26, 101, 111, 121,
The time used: 2.498627e-04 seconds

回复

使用道具 举报

3

主题

0

好友

29

积分

新手上路

Rank: 1

6#
发表于 2013-8-18 14:26:56 |只看该作者
中午休息了会儿,刚回来继续学习,哈哈
我不是搞ACM的,我是死运维。

time不需要导入的,这个time只是我用来检验哪种效率更高而已。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-13 09:04 , Processed in 0.017464 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部