【发布时间】:2019-10-06 17:35:59
【问题描述】:
如何仅用一个 return 语句完成FizzBuzz 练习在 Codingbat 中?
我上次用来解决问题的代码是:
public String[] fizzBuzz(int start, int end) {
String[] a = new String[end - start];
for(int i = start; i < end; i++) a[i - start] = i % 15 == 0 ? "FizzBuzz" : i % 3 == 0 ? "Fizz" : i % 5 == 0 ? "Buzz" : String.valueOf(i);
return a;
}
我的目标是编写如下所示的代码:
public String[] fizzBuzz(int start, int end) {
return foo;
}
问题
这是著名的 FizzBuzz 问题的稍微困难的版本,有时作为求职面试的第一个问题。 (另请参阅:FizzBuzz Code。)考虑从 start 开始到但不包括 end 的一系列数字,例如 start=1 和 end=5给出系列 1、2、3、4。返回一个新的
String[]数组,其中包含这些数字的字符串形式,除了 3 的倍数,使用“Fizz”代替数字,对于 5 的倍数使用“Buzz”,对于 3 和 5 的倍数,请使用“FizzBuzz”。在 Java 中,String.valueOf(xxx)将使 String 形式为 int 或其他类型。这个版本比通常的版本稍微复杂一点,因为你必须分配和索引到一个数组中而不是仅仅打印,我们改变开始/结束而不是总是做 1..100。
测试用例
fizzBuzz(1, 6) → ["1", "2", "Fizz", "4", "Buzz"]
fizzBuzz(1, 8) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7"]
fizzBuzz(1, 11) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz"]
fizzBuzz(1, 16) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"]
fizzBuzz(1, 4) → ["1", "2", "Fizz"]
fizzBuzz(1, 2) → ["1"]
fizzBuzz(50, 56) → ["Buzz", "Fizz", "52", "53", "Fizz", "Buzz"]
fizzBuzz(15, 17) → ["FizzBuzz", "16"]
fizzBuzz(30, 36) → ["FizzBuzz", "31", "32", "Fizz", "34", "Buzz"]
fizzBuzz(1000, 1006) → ["Buzz", "1001", "Fizz", "1003", "1004", "FizzBuzz"]
fizzBuzz(99, 102) → ["Fizz", "Buzz", "101"]
fizzBuzz(14, 20) → ["14", "FizzBuzz", "16", "17", "Fizz", "19"]
【问题讨论】:
-
这个问题更适合codegolf.stackexchange.com
-
@jrook 我也会把它贴在那里。
-
@jrook Mine 并不是在寻找最小的方法。我只是想要一种与 Codingbat 兼容并且只使用
return语句的方式。