繁体   English   中英

给定一个长度为 N 的数组,其中数组中的每个元素都有 X 种可能性,返回所有可能的数组

[英]Given an array of length N, where each element in the array has X possibilities, return all possible arrays

我正在尝试使用 Java 解决上述问题。 考虑过使用 for 循环,但如果事先不知道 X 和 N,我无法看到这将如何工作。 我试图用递归来解决它,但不确定它的外观。 已经尝试了几个小时了。 任何帮助是极大的赞赏。

例如,如果 N = 4 且 x = 3,则可能的数组为:

[0,0,0,1]
[2,1,0,0]
[1,2,1,1]
[0,2,2,2]

首先,所有说“使用调试器”的人,这不是关于代码……而是关于理解。 他询问方向,我会理解如果你投反对票,因为他没有展示他的代码,还有别的东西,你可以写......

我的算法就像计数一样,你开始计数直到 X(基本上就像在 Base X 中计数),当你到达 X 时,你将 1 添加到Array的下一个位置并重置最后一个位置。

所以,据我所知,你不能以正常方式返回几个数组,所以我假设你想打印它们。
现在,这是一个“不错”的代码:
http://pastebin.com/Uqv3fMxg

几个注意事项:
你不应该让函数成为静态的,我是因为懒惰才这么做的。
这并不完美,它打印了两次 [1,0]、[2,0] 等等。 找不到问题,对我来说太晚了,我明天再试试看。

我不是一个评论他的代码的人,我做了一点,但我会在这里解释我能做的一切。

程序从主方法开始,我定义了Array并启动了递归方法。
停止语句是当我进入 N 位置时(数组中不存在,只有 N-1)
参数:数组,我正在计算的数组中的位置和“模式”,是运行到下一个位置还是只是打印该位置的所有数字。

alreadyHas变量不能打印数字 2 次。
如果我不使用它,它会打印每个数字至少 2 次,它会重做他所做的任何工作,直到他移动到这个位置和每个位置。 很难解释,你可以写 0 而不是它,看看会发生什么。

所以,我一直数到 X,每次我打印新Array并计算每个数字而不是跳过任何数字时,我必须在最后一个位置用不同的数字重新计算最后一个位置。

在我计算了这个位置中所有可能的数字后,我给它一个值 0 并转到下一个位置。

所以,总而言之,您计算数组第一个位置的数字,当您达到最大值时,您在下一个位置添加进位并重置相应位置。

如果有什么不清楚,我很抱歉,英语不是我的母语,所以我很难解释自己。
如果有什么不清楚的地方,你可以问我任何问题,我会回答,这会更容易解释。

晚安 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM