Crossin的编程教室

标题: 回文数答案 [打印本页]

作者: sageskr    时间: 2013-8-18 09:59
标题: 回文数答案
俩方法:
#!/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


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

大家一起学习下,看看还有没有其他更加牛逼的方法。一起学习
作者: ss360du    时间: 2013-8-18 12:15
for num in range(0, 20000):
    origin = num*num
    revers = int(''.join((str(origin))[::-1]))
    if revers == origin:
        print origin

如果是刷ACM的题的话,我这种解法效率肯定过不去,但从Python的角度来看还是…略显简洁。。
作者: ss360du    时间: 2013-8-18 12:17
嗯,跟第二种差不多,只是我还多了转换成整数这一步。学习了。
BTW,楼主是搞ACM的吧…
你的代码风格有浓浓的C的味道
作者: SH40Z1HU1    时间: 2013-8-18 13:06
受楼主启发我也用了 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


作者: sageskr    时间: 2013-8-18 14:26
中午休息了会儿,刚回来继续学习,哈哈
我不是搞ACM的,我是死运维。

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




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5