python题目:判断数据是否是回文

举报
橙子园 发表于 2022/05/26 01:21:16 2022/05/26
【摘要】 你的点赞与评论是我最大的创作动力! 简介: 回文通俗点就是顺着读和倒着读数字的顺序都一样。 思考: 可以首先想到的方法就是逐一比较,再仔细发现只需要比较一半就好像可以了。下面是两种方法,一种是...

你的点赞与评论是我最大的创作动力!

在这里插入图片描述

简介:

回文通俗点就是顺着读和倒着读数字的顺序都一样。

思考:

可以首先想到的方法就是逐一比较,再仔细发现只需要比较一半就好像可以了。下面是两种方法,一种是逐一比较,一种是比较一半(如果数据个数是单数则比到[n/2],偶数是n/2)。

方法一:

# O(n),不稳定(有最坏情况与最好情况)
@count_time
def test(num):
    num = str(num)
    num_len = len(num)
    for i in range(num_len):
        if num[i] != num[num_len - i - 1]:
            return '不是回文!'
        if i == num_len - 1:
            return '是回文!'

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

方法二:

# O(n/2), 不稳定(有最坏情况与最好情况)
@count_time
def two_test(num):
    num = str(num)
    num_len = len(num)
    iden = num_len // 2
    for i in range(iden):
        if num[i] != num[num_len - i -1]:
            return '不是回文!'
        if i == iden - 1:
            return '是回文!'

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

比较:

写一个测试函数花费时间的装饰器:

from functools import wraps
def count_time(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start_time = default_timer()
        result = func(*args, **kwargs)
        end_time = default_timer()
        total_time = end_time - start_time
        return result, total_time
    return wrapper

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

将@count_time加到两个函数上,使用下面测试时间

spend_test1 = test(2332)
spend_two_test1 = two_test(2332)
print(spend_test1)
print(spend_two_test1)
spend_test2 = test(23789016890421578970124789037681643074247034618673098742107987512409861098732)
spend_two_test2 = two_test(23789016890421578970124789037681643074247034618673098742107987512409861098732)
print(spend_test2)
print(spend_two_test2)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

上述代码结果:

('是回文!', 4.5000000000045e-06)
('是回文!', 1.8999999999991246e-06)
('是回文!', 1.1099999999999999e-05)
('是回文!', 5.299999999999749e-06)

  
 
  • 1
  • 2
  • 3
  • 4

总结:方法一的时间复杂度是O(n), 不稳定(有最坏情况与最好情况), 方法二的时间复杂度是O(n/2), 不稳定(有最坏情况与最好情况)。在数据集很大的情况下,方法二的时间效率要比方法一高很多

文章来源: blog.csdn.net,作者:橙子园,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/Chenftli/article/details/101426648

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。