156-412. Fizz Buzz

写一个程序,输出从 1 到 n 数字的字符串表示。(第一个和第二个是我写的,最直接都是这么朴实无华)
class Solution(object):
    def fizzBuzz1(self, n):
        """
        :type n: int
        :rtype: List[str]
        """
        ret_list = []
        for i in range(1, n + 1):
            if i % 3 == 0 and i % 5 == 0:
                ret_list.append("FizzBuzz")
            elif i % 3 == 0:
                ret_list.append("Fizz")
            elif i % 5 == 0:
                ret_list.append("Buzz")
            else:
                ret_list.append(str(i))
        return ret_list

    def fizzBuzz2(self, n):
        """在计算质数的时候讲到的埃氏筛
        :type n: int
        :rtype: List[str]
        """
        if n < 1:
            return []

        ret_list = [0 for _ in range(n + 1)]
        for i in range(1, n + 1):
            if ret_list[i] == 0:
                times3 = 3 * i
                while times3 < n + 1:
                    if ret_list[times3] == 0:
                        ret_list[times3] = "Fizz"
                    times3 += 3

                times5 = 5 * i
                while times5 < n + 1:
                    if ret_list[times5] == 0:
                        ret_list[times5] = "Buzz"
                    else:
                        if ret_list[times5] == "Fizz":
                            ret_list[times5] += "Buzz"
                    times5 += 5

                ret_list[i] = str(i)
        return ret_list[1:]

    def fizzBuzz(self, n):
        """ 这种比上面的好
        :type n: int
        :rtype: List[str]
        """
        ans = [str(i) for i in range(1,n+1)]
        cur = 3
        while cur <= n:
            ans[cur-1] = "Fizz"
            cur += 3
        cur = 5
        while cur <= n:
            ans[cur-1] = "Buzz"
            cur += 5
        cur = 15
        while cur <= n:
            ans[cur-1] = "FizzBuzz"
            cur += 15
        return ans


if __name__ == '__main__':
    s1 = Solution()
    prices = 100
    root = s1.fizzBuzz(prices)
    print(root)
posted @ 2021-01-26 11:05  楠海  阅读(122)  评论(0编辑  收藏  举报