Javascript JS-将嵌套的forloops转换为单个循环

Javascript JS-将嵌套的forloops转换为单个循环,javascript,algorithm,loops,nested,time-complexity,Javascript,Algorithm,Loops,Nested,Time Complexity,我需要将这个嵌套循环转换为单个循环 这是场景的循环: 第一个递增器是i,它从0开始,应该一直运行到10 第二个递增器是j,它从开始,从+1开始,一直运行到10 。 我的嵌套循环 for(变量i=0;i


我需要将这个嵌套循环转换为单个循环

这是场景的循环:

  • 第一个递增器是i,它从0开始,应该一直运行到10
  • 第二个递增器是j,它从开始,从+1开始,一直运行到10

我的嵌套循环
for(变量i=0;i<10;i++){
对于(var j=i+1;j<10;j++){
如果(某些条件){
做某事
}
}
}
我的转换尝试
var i=0;
而(i<10){
var j=i+1;
如果(j<10){
如果(某些条件){
做某事
}
j++;
}
i++;
}
不幸的是,我的尝试没有产生预期的结果。 第二个代码段不提供第一个代码段提供的输出。 谁能告诉我我的错误是什么,或者为我提供更好的解决方案来实现我的目标


谢谢

您需要在else语句中更新
i
,或者使用
continue
。并在while主体外部声明
j

但请记住,这既不会改变“复杂性顺序”,也不会“优化”代码

var i=0;
var j=1;
而(i<10){
如果(j<10){
如果(真){
控制台日志(i,j)
}
j++;
}否则{
i++;
j=i+1;
}

}
不确定它是否提高了可读性和复杂性,但以下内容应该会产生同样的效果

var i=0,j=1;
而(i<9){
控制台日志(i,j);
j+=1;
如果(j>=10){i+=1;j=i+1}

}
您可以调整
i
的循环长度,并检查
j
是否大于或等于
9
,然后增加i并从新的
j
开始

var i=0,
j=1;
而(i<9){
控制台日志(i,j);
//你喜欢吃东西吗
如果(j>=9)j=++i;
j++;
}
.as控制台包装{最大高度:100%!重要;顶部:0;}
if(true)
??奇怪的转到第一个嵌套循环是O(1/2N^2)(或者基本上是N^2),您正试图将其转换为O(N)。我认为这是不可能的,除非您的第一个代码块首先误用了嵌套循环。你可能想提供一个条件“这样我就可以优化复杂性的顺序。”这不是它的工作原理。如果你想在这对
i
j
上迭代,那么你的循环将迭代O(n^2)次,因为这就是你想要循环迭代的次数。要迭代的
i
j
有O(n^2)对,因此无法通过更改迭代方式来提高时间复杂度。
for (var i = 0; i < 10; i++) {
    for (var j = i + 1; j < 10; j++) {

       if (some_condition) {
            do_sth()
       }

    }
}
var i = 0; 
while (i < 10){
    var j = i + 1;

    if (j < 10) {
        if (some_condition) {
            do_sth()
        }

        j++;
    }

    i++;
}