球形法官Palindrome

时间:2015-05-06 17:17:42

标签: python

我正在尝试解决这个问题:http://www.spoj.com/problems/PALIN/.I使用Python,虽然它运行正常但似乎太慢了。我正试图找到一种提高性能的方法。 这是代码:

case=raw_input();
l=int(case)
cas=[]

for k in range(0,l,1):
  t=raw_input();
  cas.append(t)


con=False
print("")
for k in range(0,l,1):
var=int(cas[k])+1
var=str(var)
con= False
while con != True:


            n=int(var)

            i=len(var)
            j=-1


            for i in range(i,0,-1):
                j+=1
                if var[i-1]==var[j]:
                  pass
                else:
                  break


                if i==1:


                  print var
                  con=True
            n+=1
            var=str(n)

有什么建议吗?先谢谢!

1 个答案:

答案 0 :(得分:0)

您正试图找到回文。它消耗大部分时间。为什么不尝试构建呢?考虑一下:

  1. 对于长度均匀的数字(如3133):
  2. 1.1。检查左半部分是低于还是等于右半部分(即31 <= 33)。如果是这样,那么在左半边加1(31 + 1 = 32)。

    1.2。反转左半部分构建回文:32-> 23

    1.3。得到结果:'32'+'23'='3223'

    1. 对于奇数长度的数字,你应该做的基本相同,但要特别注意中间数字。即在809中,左半部分(8)低于右边(9),所以你需要加1到中间数字而不是用左半部分构建回文:818