FizzBuzz [source code]


public class FizzBuzz {
    public List<String> fizzBuzz(int n) {
        List<String> result = new ArrayList<>();
        for (int i = 1; i <= n; i++ ) {
            String toAppend = "";
            if(i%3==0) toAppend += "Fizz";
            if(i%5==0) toAppend += "Buzz";
            if((i%3!=0)&&(i%5!=0)) toAppend = Integer.toString(i);
            result.add(toAppend);
        }
        return result;
    }

    public static void main(String[] arg) {
        FizzBuzz tester = new FizzBuzz();
        Scanner reader = new Scanner(System.in);
        System.out.println();
        for (String word : tester.fizzBuzz(reader.nextInt())) System.out.println(word);
    }
}

这个题目总体还是没有想到什么很聪明的办法,后面看看 discussion 有没有好的优化.
需要注意的是 JAVA 的 concatenation 可以直接使用+,用^反而有问题.

这个代码的速度是5ms, 19%. 不是很想折腾了;

看了一下人家的答案:

public class Solution {  
    public List<String> fizzBuzz(int n) {  
        List<String> ret = new ArrayList<String>(n);  
        for(int i=1,fizz=0,buzz=0;i<=n ;i++){  
            fizz++;  
            buzz++;  
            if(fizz==3 && buzz==5){  
                ret.add("FizzBuzz");  
                fizz=0;  
                buzz=0;  
            }else if(fizz==3){  
                ret.add("Fizz");  
                fizz=0;  
            }else if(buzz==5){  
                ret.add("Buzz");  
                buzz=0;  
            }else{  
                ret.add(String.valueOf(i));  
            }  
        }   
        return ret;  
    }  
}

这个代码加速的核心就在于没有使用 mod. 当然实际上里面做的工作就是用两个 counter 来模拟 mod. 这个其实上一个比较蛋疼的技巧, 普遍性角度来说估计是没什么卵用的, 不过了解一下也可以. 这个算法的时间是4ms.


Problem Description

Write a program that outputs the string representation of numbers from 1 to n.

But for multiples of three it should output “Fizz” instead of the number and for the multiples of five output “Buzz”.
For numbers which are multiples of both three and five output “FizzBuzz”.

Example:

n = 15,

Return:
[
"1",
"2",
"Fizz",
"4",
"Buzz",
"Fizz",
"7",
"8",
"Fizz",
"Buzz",
"11",
"Fizz",
"13",
"14",
"FizzBuzz"
]

results matching ""

    No results matching ""