pythontip 100days-day8

题目

输入一个正整数n,返回一个list,list中的内容为1到n,但是将其中3的倍数替换为’Fizz’,5的倍数替换为’Buzz’,同时为3和5的倍数的替换为’FizzBuzz’

例子

  • 15 ->

[ ‘1’, ‘2’, ‘Fizz’, ‘4’, ‘Buzz’, ‘Fizz’, ‘7’, ‘8’, ‘Fizz’, ‘Buzz’, ‘11’, ‘Fizz’, ‘13’, ‘14’, ‘FizzBuzz’ ]

tips

  1. 利用取模运算

答案

解法1:

def fizz_buzz(n):
    results = []
    for i in range(1, n + 1):
        if i % 3 == 0 and i % 5 == 0:
            results.append('FizzBuzz')
        elif i % 3 == 0:
            results.append('Fizz')
        elif i % 5 == 0:
            results.append('Buzz')
        else:
            results.append(str(i))
    return results                             

性能

  1. 时间复杂度O(n)
  2. 空间复杂度O(1)

关键点:1.利用取模运算

解法2:

def fizz_buzz(n):
    l = list(range(1, n + 1))
    for x in l:
        if x % 15 == 0:
            l[l.index(x)] = 'FizzBuzz'
        elif x % 3 == 0:
            l[l.index(x)] = 'Fizz'
        elif x % 5 == 0:
            l[l.index(x)] = 'Buzz'
        else:
            l[l.index(x)] = str(x)  # 要把数字转换为str类型
    return l

性能

  1. 时间复杂度O(n)
  2. 空间复杂度O(n)

关键点

  1. 利用取模运算
  2. 利用index()方法定位元素

解法3:

def fizz_buzz(n):
    l = list(range(1, n + 1))

    def getfizzbuzz(n):
        if n % 15 == 0:
            return 'FizzBuzz'
        elif n % 5 == 0:
            return 'Buzz'
        elif n % 3 == 0:
            return 'Fizz'
        else:
            return str(n)

    return list(map(getfizzbuzz, l))

性能

  1. 时间复杂度O(2n)
  2. 空间复杂度O(n)

关键点

  1. 利用取模运算
  2. 利用map()方法对迭代对象处理