look and say 外观数列的python实现
2024-09-06 07:51:17
#look_and_say 外观数列
如果我们把 1 作为Look-and-say 数列的第一项,那么,它的前几项是这样的:
1, 11, 21, 1211, 111221, 312211, 13112221, 1113213211, ...
在确定了Look-and-say 数列的第一项之后,就可以根据前一项确定后一项的值了,在上面的示例中,我们把 1 作为此种数列的第一项,那么,就可以这样来推导它的其余项了:
第1个是 1 时,记作 1;
第2个是读前一个数 "2 个1", 记作 21;
第3个是读前一个数 "1个2, 1个1", 记作 1211;
第4个是读前一个数 "1个1,1个2,2个1", 记作 111221;
...
依此类推。
#模拟栈弹出的操作,以弹出的第一个值作为其他弹出的值比较,如果相等i++,不等,开始下一次记录。 def LookSay(look_s):
li = list(look_s)
#同样数值的计数器 i
i= 1
#依次弹出列表的数值
a = li.pop(0)
#处理look_s = '1'的情况
if len(li) == 0:
return str(i) + a
#结果集
st = ''
while len(li) > 0:
s = li.pop(0)
if a == s:
i += 1
else:
st = st + str(i) + a
a = s
i = 1
#处理最后弹出的情况
if len(li) == 0:
st = st + str(i) + s
return st te = '1'
while True:
te = LookSay(te)
print(te)
正则表达式处理:
def LookSay(look_s):
#正则表达式中的小括号"()"。是代表分组的意思。 如果再其后面出现\1则是代表与第一个小括号中要匹配的内容相同。
#注意:\1必须与小括号配合使用
st = ''
for s in re.finditer(r"(\d)\1*",look_s):
st = st + str(len(s.group(0)))+s.group(1)
return st
最新文章
- 利用gulp解决前后端分离的header/footer引入问题
- 360:且用且珍惜!解决虚拟机linux启动缓慢以及ssh端卡顿的问题!
- mysql命令行基本操作
- 关于UGUI Image Sliced模式的一个BUG。
- c++11中的for简化用法
- manacher浅析
- HDU 1863 畅通工程
- excel筛选两列值是否相同,如果相同返回第三列值
- json的js和C#操作
- git SSh key多个key对应多个项目
- lua IDE for cocos2d-x development
- sax(用于处理XML事件驱动的推模型)解析例子
- Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8
- Vscode 插件
- iOS开发小技巧总结
- spiral matrix 螺旋矩阵
- vue-cli3.0怎么修改端口?
- centos7 编译安装nginx+tcp转发
- 2.7 UML状态图
- mysql 批量kill
热门文章
- C++的vector容器清空
- BZOJ:2190: [SDOI2008]仪仗队
- 花了一周整理的,这是价值10W的32个Python项目!
- 全面掌握Nginx配置+快速搭建高可用架构 一 Nginx的访问控制
- comparable and comparator 比较
- expresscache和primocache加速资料整理-centos7缓存加速
- Python Email发送,通知业务完成
- 遍历数组提取List[Int]
- Scheduled定时任务器在Springboot中的使用
- hdu 6581 Vacation【思维】