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