zoukankan      html  css  js  c++  java
  • look and say 外观数列的python实现

    #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
    

      

  • 相关阅读:
    MVC NonAction属性
    未将对象引用设置到对象的实例
    回调函数callback
    Json详解
    浅谈HTTP中Get与Post的区别
    JQuery $.ajax()方法详解
    C#中Const和Readonly的区别
    全面解释StringBuilder、StringBuffer和String的关系
    基本数据类型的包装类和随机数
    枚举类的使用
  • 原文地址:https://www.cnblogs.com/sherlockhomles/p/8352301.html
Copyright © 2011-2022 走看看