【发布时间】:2015-04-27 20:19:48
【问题描述】:
假设我有一个整数数组,我需要按顺序返回一个包含所有可被 3 整除的数字的数组。
我得到了界面:
List<int> ListElementsDivisibleBy3Recursive(List<int> input)
所以它必须接受一个列表并返回一个列表,并递归过滤它。我尝试从列表的开头弹出元素,直到我找到一个符合所需条件的数字,这就是我卡住的地方。我不知道如何跳到下一个元素并保留与条件匹配的元素。这是我目前所拥有的:
static List<int> ListElementsDivisibleBy3Recursive(List<int> input)
{
if (input.Count == 0)
return input;
else if (input.ElementAt(0) % 3 == 0)
{
return ListElementsDivisibleBy3Recursive(input); <--I have no idea what to do here
}
else
{
input.RemoveAt(0);
return ListElementsDivisibleBy3Recursive(input);
}
}
如果允许我将指针传递给我所在的列表中的位置,那会容易得多,但我所拥有的只是输入列表和要使用的返回列表。如何删除列表中的元素,同时保留与条件匹配的元素?或者我是不是走错了路?不知道我应该如何从逻辑上解决这个问题。我也意识到我的基本条件也是错误的。
【问题讨论】:
-
试图用递归解决这个问题....是个坏主意。我的意思是,你可以做到。但为什么呢?
-
为方便起见,创建一个新列表,在循环过程中,您可以将可被 3 整除的整数添加到该新列表中。之后,您可以对新的列表值进行排序。为了使它更容易,您可以使用单行 LINQ 语句来做到这一点。
-
您一直在使用
array这个词,但实际上您正在使用列表。另请注意,只有当您的数据结构类似于不可变链表而不是可变数组支持的列表时,才能以递归方式解决此类问题。 -
return input.Where(x => x % 3 == 0).OrderBy(x => x);将是最简单的解决方案。不需要递归。 -
@ps2goat 我必须使用 LINQ、循环和递归来完成。前两个很简单。这让我很头疼。