python题目:判断数据是否是回文
【摘要】
你的点赞与评论是我最大的创作动力!
简介:
回文通俗点就是顺着读和倒着读数字的顺序都一样。
思考:
可以首先想到的方法就是逐一比较,再仔细发现只需要比较一半就好像可以了。下面是两种方法,一种是...
你的点赞与评论是我最大的创作动力!
简介:
回文通俗点就是顺着读和倒着读数字的顺序都一样。
思考:
可以首先想到的方法就是逐一比较,再仔细发现只需要比较一半就好像可以了。下面是两种方法,一种是逐一比较,一种是比较一半(如果数据个数是单数则比到[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)