gpt4 book ai didi

Java FizzBu​​zz递归解决方案

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:13 25 4
gpt4 key购买 nike

尝试使用 Java 中的 FizzBu​​zz 递归解决方案返回具有 n 次迭代的字符串列表。例如,n = 4 应该输出 ["1","2","Fizz", 4]。但是,使用我当前的代码,输出只是 ["4"]。为什么我的解决方案不执行递归函数?任何其他批评表示赞赏!

class Solution {
public List<String> fizzBuzz(int n) {

//create variable to return list of strings
List<String> fbList = new ArrayList<String>();

//base case 1
if(n == 0){
fbList.add(Integer.toString(0));
}

//base case 2
else if(n == 1){
fbList.add(Integer.toString(1));
}

//OW take n and begin reducing recursively from, n - 1
else{
if(n % 3 == 0){
fbList.add("Fizz");
}
else if(n % 5 == 0){
fbList.add("Buzz");
}
else if((n % 3 == 0) && (n % 5 == 0)){
fbList.add("FizzBuzz");
}
else{
fbList.add(Integer.toString(n));
}
//recursive function call
fizzBuzz(n - 1);
}
return fbList;
}
}

最佳答案

问题是每次递归调用都会创建一个新的 List。您返回列表但是:

fizzBuzz(n - 1);

您忽略了递归调用的返回值。要解决此问题,您可以执行以下操作:

fbList.addAll(0, fizzBuzz(n - 1));

这将利用方法 addAll添加递归调用返回的所有元素。这将返回:

[1, 2, Fizz, 4]

然而,这对于 ArrayList 来说相当昂贵。您可以将其更改为 LinkedList,这将允许线性时间添加。


还有你的 if/else if/else 链出​​了问题。 if((n % 3 == 0) && (n % 5 == 0)) 应该在 if(n % 3 == 0) 之前如果(n % 5 == 0)。否则它将始终输入 if(n % 5 == 0)if(n % 3 == 0):

if((n % 3 == 0) && (n % 5 == 0)){
fbList.add("FizzBuzz");
}
else if(n % 3 == 0){
fbList.add("Fizz");
}
else if(n % 5 == 0){
fbList.add("Buzz");
}

关于Java FizzBu​​zz递归解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53697079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com