LeetCode题库第三十八题(简单系列)

题目及要求:

报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

1.     1
2.     11
3.     21
4.     1211
5.     111221

1 被读作  "one 1"  ("一个一") , 即 11
11 被读作 "two 1s" ("两个一"), 即 21
21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211

给定一个正整数 n ,输出报数序列的第 n 项。

注意:整数顺序将表示为一个字符串。

 

思路:

未看到数据有什么联系,所以看了一下这题的的提示帮助

由上可以看出,序列1的值为初始值,序列2的是为序列1的值的报数,序列3的值为序列2的值的报数,序列4的值为序列3的报数,以此类推。

 

重新整理的一下思路,我觉得首先应该把报数的规律找出来,然后再去匹配序列,以下代码为第一次尝试。

s="1"
# def countAndSay(n):
n=0
count=0
nums=[]
st=[]
if s.count(s[0])==len(s):
    ste = str(s.count(s[0])) + s[0]
    st.append(ste)
    fina = ''.join(st)
else:
    for i in range(1,len(s)):
        if s[i]!=s[i-1]:
            nums.append(i)

    ste=str(nums[0])+s[0]
    st.append(ste)
    for i in range(1,len(nums)):
        ste = str(nums[i]-nums[i-1]) + s[nums[i]-1]
        st.append(ste)
    if nums[-1] < len(s):
        f=len(s)-nums[-1]#最后一个值的个数
        ste2=str(f)+s[-1]
        st.append(ste2)

    fina=''.join(st)
print(fina)

套用报数到序列当中,恩,很难,还没有想到,只能重新再添加一个函数块了。代码如下,虽然这个可以实现效果,但是通不过LeetCode,因为LeetCode只会承认一个函数块,多的函数块是不承认的。

class Solution:
    def countAndSay(self, n):
        """
        :type n: int
        :rtype: str
        """
    # def countAndSay(n):#递归做法
        if n==1:
            return "1"
        s='1'
        # fina=sunfa(s)
        while n>1:

            fina=sunfa(s)
            s = fina
            n-=1
        return str(fina)


    def  sunfa(s):

        # s="1"#起始值
        nums = []
        st = []
        if s.count(s[0]) == len(s):
            ste = str(s.count(s[0])) + s[0]
            st.append(ste)
            fina = ''.join(st)
        else:
            for i in range(1, len(s)):
                if s[i] != s[i - 1]:
                    nums.append(i)

            ste = str(nums[0]) + s[0]
            st.append(ste)
            for i in range(1, len(nums)):
                ste = str(nums[i] - nums[i - 1]) + s[nums[i] - 1]
                st.append(ste)
            if nums[-1] < len(s):
                f = len(s) - nums[-1]  # 最后一个值的个数
                ste2 = str(f) + s[-1]
                st.append(ste2)

            fina = ''.join(st)
        return fina

所以,我决定换个思路,

 

-------未完待续--------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值