有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何按字典顺序循环所有可能的特定长度的向量?

假设我们有一个长度为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) 个答案

  1. # 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;
    }