如何按字典顺序遍历所有特定长度的可能向量?

时间:2019-05-15 20:19:17

标签: java loops nested-loops lexicographic

假设我们有一个长度为4的向量,其中每个元素可以是0到9之间的数字。例如:<1, 8, 0, 3>

我不想简单地循环所有10 ^ 4个可能的向量,而是想按特定顺序循环。因此,我想从<0, 0, 0, 0>开始,转到<1, 0, 0, 0>,然后:

<2, 0, 0, 0>, <3, 0, 0, 0>, ..., <9, 0, 0, 0>, <0, 1, 0, 0>

,依此类推(注意最后两个的顺序)。我想不出一种写矢量长度可变的方法。

假设我们处于第i次迭代中,按我上面提到的字典顺序具有第i个向量。具有第i个向量对于在第(i+1)个向量中执行某些处理是必要的。该方案节省了对所有可能向量的随机循环的计算。

我还没有真正找到一种解决问题的有效方法。特别考虑到我应该能够支持可变的矢量长度和条目的不同数字范围。

1 个答案:

答案 0 :(得分:1)

因此,在这种情况下,您可以将每个元素视为以10为底的数字。第i个元素在以10为底的i中,数字以相反的顺序排列。例如:

int[] indexToElement(int index, int base) {
    String string = Integer.toString(index, base);
    int[] element = new int[string.length()];

    for (int i = 0; i < string.length(); ++i) {
        element[i] = Character.digit(string.charAt(string.length() - i - 1), base);
    }

    return element;
}