lintcode入门篇十

420. 报数

中文English

报数指的是,按照其中的整数的顺序进行报数,然后得到下一个数。如下所示:

1, 11, 21, 1211, 111221, ...

1 读作 "one 1" -> 11

11 读作 "two 1s" -> 21

21 读作 "one 2, then one 1" -> 1211

给定一个整数 n, 返回 第 n 个顺序。

样例

样例 1:

输入:1
输出:"1"

样例 2:

输入:5
输出:"111221"

注意事项

整数的顺序将表示为一个字符串。

输入测试数据 (每行一个参数)如何理解测试数据?
class Solution:
    '''
    大致思路:
    1.首先考虑怎么当前需要报的数得到的是多少getAndSay(),重点
    2.然后进行循环,第一个值已经固定origin为1,之后的值循环调用
    '''
    def countAndSay(self, n):
        ##第一个为1,固定值
        origin = 1
        #循环调用
        for i in range(1,n):
            origin = self.getAndSay(origin)
        return str(origin)


    def getAndSay(self,num):
        p = str(num)[0]##给定初始值str(num)[0],此时该值的count是1
        count = 1 
        res = ''
        s = str(num) + ' '
        for i in range(1,len(s)):
            ##此时是想要替换的时候,进行拼接count和p
            if s[i]!= p:
                res = res + str(count) + p  
                p = s[i]##重新赋值p和count
                count = 1
            ##当s[i]=='',表示的是已经循环到最后了,此时需要加上最后的那个p和count就可以
            elif s[i] == ' ':
                res = res + str(count) + p  
            ##此时表示的是p仍然与上一个相同,即开始计数
            else:
                count += 1
        return res

422. 最后一个单词的长度

中文English

给定一个字符串, 包含大小写字母、空格 ' ',请返回其最后一个单词的长度。

如果不存在最后一个单词,请返回 0 。

样例

样例 1:

输入:"Hello World"
输出:5

样例 2:

输入:"Hello LintCode"
输出:8

注意事项

一个单词的界定是,由字母组成,但不包含任何的空格。

class Solution:
    """
    @param s: A string
    @return: the length of last word
    """
    def lengthOfLastWord(self, s):
        # write your code here'
        if s == '':
            return 0
        dic = s.split(' ')
        if ''  in dic:
            dic.remove('')
        return len(dic[-1])

坑点:
1.如果s为'hello world '的时候,最后有一个空格,dic的最后一个元素是 '',所以不符合最后一个单词的定义,需要将''的元素给移除掉

2.如果s为''的话,那么remove掉''的话,dic就是[],空,return dic[-1]就会报错,所以需要判断if s== ''空的时候,返回0.

原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12461868.html