Java 将嵌套for循环作为while写入

Java 将嵌套for循环作为while写入,java,loops,for-loop,while-loop,iteration,Java,Loops,For Loop,While Loop,Iteration,有没有一种方法可以用一个(while-)循环来写这样的东西 for(int a=0;a

有没有一种方法可以用一个(while-)循环来写这样的东西

for(int a=0;a
如果我需要这样的东西,通常我会使用递归,所以我想它可以用堆栈来完成,但我更喜欢没有堆栈的解决方案(如果可能的话)


提前谢谢你

或者您可以这样做,将索引存储在数组中

int[] indexes = new int[n];
outer: while (true) {
    if (indexes[n-1] == u) {
        int indexesToChange = 1;
        while ((indexesToChange < n + 1) && (indexes[n - indexesToChange] >= (u-1)))
            indexesToChange++;
        if (indexesToChange == n+1)
            break outer;
        indexes[n - indexesToChange]++;
        for (int i = indexesToChange - 1; i > 0; i--)
            indexes[n - i] = indexes[n - indexesToChange];
    } else {
        // do something
        indexes[n-1]++;
    }
}
int[]索引=新的int[n];
外部:while(true){
if(索引[n-1]==u){
int indexesToChange=1;
而((指数变化=(u-1)))
indexesToChange++;
if(indexesToChange==n+1)
打破外部;
索引[n-索引更改]+;
对于(int i=indexesToChange-1;i>0;i--)
索引[n-i]=索引[n-indexesToChange];
}否则{
//做点什么
索引[n-1]++;
}
}
尚未对其进行测试,因此可能在实现中出现错误。但我希望我能把重点讲清楚

更新

测试并发现错误。现在它已修复并按预期工作。

取决于您使用的编程语言-请适当标记.Java。我认为这可能是语言无关的。嗯,不,例如,对于这种结构,肯定有很好的C++替代品,但是对于C语言和C语言(可能是java,但我不知道),如果有选择的话,它的选择可能不太清楚。如果您想要一个语言不可知的答案,那么
语言不可知
标签很有用。请检查此项。看起来很像@彼得罗夫:我不确定这是否有帮助,因为OP的循环不是从0开始迭代的。这个问题需要一个循环。我在你们的答案中计算了三个循环。我不认为“单个”循环是问题的确切要求。这里最重要的是循环的数量不依赖于n。这是O(1)对O(n)的比较。单循环会很好,虽然这更像是一个想法,而且有多个循环的解决方案对我来说也很有效。不确定是否存在单循环解决方案。因为至少有一个主循环有O(u^n)次迭代,并且在每次迭代中都应该检查n个索引(这是另一个循环)。理论上,如果可以使用u进制数字系统中的n个数字作为计数器,并且可以在恒定时间内访问随机数:D,则单循环解决方案是可能的
int[] indexes = new int[n];
outer: while (true) {
    if (indexes[n-1] == u) {
        int indexesToChange = 1;
        while ((indexesToChange < n + 1) && (indexes[n - indexesToChange] >= (u-1)))
            indexesToChange++;
        if (indexesToChange == n+1)
            break outer;
        indexes[n - indexesToChange]++;
        for (int i = indexesToChange - 1; i > 0; i--)
            indexes[n - i] = indexes[n - indexesToChange];
    } else {
        // do something
        indexes[n-1]++;
    }
}