#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

  

最新文章

  1. 利用gulp解决前后端分离的header/footer引入问题
  2. 360:且用且珍惜!解决虚拟机linux启动缓慢以及ssh端卡顿的问题!
  3. mysql命令行基本操作
  4. 关于UGUI Image Sliced模式的一个BUG。
  5. c++11中的for简化用法
  6. manacher浅析
  7. HDU 1863 畅通工程
  8. excel筛选两列值是否相同,如果相同返回第三列值
  9. json的js和C#操作
  10. git SSh key多个key对应多个项目
  11. lua IDE for cocos2d-x development
  12. sax(用于处理XML事件驱动的推模型)解析例子
  13. Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8
  14. Vscode 插件
  15. iOS开发小技巧总结
  16. spiral matrix 螺旋矩阵
  17. vue-cli3.0怎么修改端口?
  18. centos7 编译安装nginx+tcp转发
  19. 2.7 UML状态图
  20. mysql 批量kill

热门文章

  1. C++的vector容器清空
  2. BZOJ:2190: [SDOI2008]仪仗队
  3. 花了一周整理的,这是价值10W的32个Python项目!
  4. 全面掌握Nginx配置+快速搭建高可用架构 一 Nginx的访问控制
  5. comparable and comparator 比较
  6. expresscache和primocache加速资料整理-centos7缓存加速
  7. Python Email发送,通知业务完成
  8. 遍历数组提取List[Int]
  9. Scheduled定时任务器在Springboot中的使用
  10. hdu 6581 Vacation【思维】