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

所以,我决定换个思路,

 

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

Leetcode题库是一个包含了各种算法和据结构问的在线题库,供程序员练习和提升技能使用。这个题库涵盖了大量的目,包括但不限于图遍历、最短路径、有效的括号、字符串解码、Z字形变换、最长公共前缀、字符串相乘、颠倒字符串的单词、比较版本号、反转字符串、压缩字符串、验证IP地址等等。它提供了java实现的leetcode解法,这些解法的代码规范,可读性良好,并且其的解法思想并不受语言限制。通过解决这些目,程序员可以提高自己的算法和编码能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [leetcode题库-leetcode-java:LeetcodeJava代码](https://download.csdn.net/download/weixin_38661100/19901136)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [LeetCode算法整理(200左右)](https://blog.csdn.net/qq_38253797/article/details/126827454)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值