我们如何在O(n)
执行时打印以下内容
可能正在使用单个for循环?
1
2 3
4 5 n
最多n
行
我所能做的就是使用嵌套for循环
答案 0 :(得分:1)
嵌套for循环并不一定意味着它不再是O(n)
。如果嵌套循环中的内容被执行O(n)
次,那么嵌套循环就完全可以了:
cur_num <- 1
cur_step <- 1
while cur_num <= n
for i <- 1 to cur_step
print cur_num++
cur_step++
print '\n'
使用单个for循环,它可行,但稍微不那么愉快
cur_num <- 1
cur_step <- 1
cur_step_consumed <- 0
for i <- 1 to n
print cur_num++
cur_step_consumed++
if cur_step_consumed == cur_step
cur_step_consumed <- 0
cur_step++
print '\n'
答案 1 :(得分:0)
在C ++中:
size_t amount = 1;
size_t count = 0;
for(size_t i=1;i<=n;++i){
cout << i << " ";
++count;
if (count == amount){
cout << endl;
count = 0;
++amount;
}
}
输出n = 29:
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29
我们的想法是跟踪当前行中要打印的元素数量,并跟踪当前行中打印的元素数量。当我们为当前行打印的元素数量与要为该行打印的元素总数相同时,重置计数并增加要为下一行打印的元素数量。你可以搞乱格式化以获得更漂亮的输出,但这是在O(n)时间和O(1)空间中如何完成它的要点。