Quantcast
Channel: InBi's Blog » Python流程控制
Viewing all articles
Browse latest Browse all 2

Python3求一个数字区间的回文数,并且它们的平方根也是回文数

$
0
0

给出两个数值X和Y,返回在这个区间里的回文数,并且要求它们的平方根也是回文数。
例如(X=1,Y=10000):

[(1, 1), (2, 4), (3, 9), (11, 121), (22, 484), (101, 10201), (111, 12321), (121, 14641), (202, 40804), (212, 44944)]


代码一:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def isPalindrome(n):
    s = str(n)
    return s == s[::-1]

def main():
    m1 = 1
    m2 = 10000000
    return [(i, i*i) for i in range(m1,m2) if isPalindrome(i) and isPalindrome(i*i)]

if __name__ == '__main__':
    import time
    
    st = time.time()
    print(main(), time.time() - st, sep='\n')

代码二:算法有进步,速度没改进

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def isPalindrome(n):
    s = str(n)
    return s == s[::-1]

def filterNum(n):
    s = str(n)
    if int(s[-1]) not in {1,2,3}:
        return False
    else:
        return s == s[::-1]

def main(n):
    return [(i, i*i) for i in range(1,n) if filterNum(i) and isPalindrome(i*i)]

if __name__ == '__main__':
    import time
    
    st = time.time()
    print(main(10000000), time.time()-st, sep='\n')

代码三:这个速度最快

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from time import time

def filterNum(n):
    s = str(n)
    return s == s[::-1] if s[-1] in '123' else False

def main(n):
    isPalindrome = lambda n: str(n) == str(n)[::-1]
    return [(i, i*i) for i in range(1,n) if filterNum(i) and isPalindrome(i*i)]

if __name__ == '__main__':
    st = time()
    print(main(10000000), time()-st, sep='\n')

Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images