我有一个问题想用 Java 解决,但我无法弄清楚我需要遵循的算法。这个问题类似于位串问题(有多少个长度为 x 的位串),但难度更大。无论如何,我什至不确定解决普通位串问题的算法。
所以这是我的实际问题: 我有 5 个变量。说 Q W X Y Z。每个变量可以取 3 个值之一(所以像位串可以取 1 或 0,但这可以取 0、1 或 2)。我需要生成此“位串”的所有可能组合。
所以一个组合可能是 00000,另一个可能是 10002,另一个可能是 22222,等等。我需要打印出这个“位串”的所有组合
我真的很困惑如何解决这个问题,甚至想出一个像样的算法。
感谢您的帮助!非常感谢。
最佳答案
您需要考虑其背后的数学。当您了解如何枚举这些字符串后,事情就会变得容易得多。这将产生一种明显的方法,不仅可以生成 字符串,还可以让您“随机访问”它们,即您还可以编写一个 get(int num)
方法这将产生第 num
个元素。
数学非常简单,它只涉及模运算 (%
) 和除法,当您自己解决这个问题时,它真的会有返回。
作为一个简单的初步准备,假设您有 n
个十进制数字。
- 给定一个数字
x
,如何得到第n
位? - 给定
n
个数字,你如何得到数字x
?
弄清楚这一点后,尝试从 10
数字中抽象出来。说,练习二进制计数。然后是三进制,这将是你的 3 位数的解决方案。
关于Java 算法数的组合变量(类似于位串算法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12334397/