首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在满足以下条件的同时打印下列序列

如何在满足以下条件的同时打印下列序列
EN

Stack Overflow用户
提问于 2013-02-26 11:59:45
回答 4查看 284关注 0票数 5

这其实是个面试问题。我不得不使用Java打印以下内容:

代码语言:javascript
复制
9
9 8 9
9 8 7 8 9
9 8 7 6 7 8 9
. . .
. . .

在采访中,我写了一段令人尴尬的代码,但它仍然有效--使用外部循环,两个内环(一个用于递减序列,另一个用于递增序列!)还有一大堆变数。其中一个变量是每一行的长度。

面试官让我试着用

  • 只有一个外环和一个内环
  • 没有行长变量。

注:在看完答案后,我认为面试官并不是说第二个条件。他可能只是想让我简化我的代码,而第二点只是他口齿不清的地方。

所以,回家后,我找到了这个:

代码语言:javascript
复制
int rowCnt = 5;

for(int i = 1; i <= rowCnt; i++)
{
    int val = 9;
    int delta = -1;
    int rowLen = i * 2 - 1;

    for(int j = 1; j <= rowLen; j++)
    {
        System.out.print(val + " ");

        val += delta;

        if(j >= rowLen / 2) delta = 1;
    }

    System.out.println();
}

在这里,我只使用一个内环。我使用一个delta值来确定是增加还是减少。对于每一行,我将当前索引与行的中点进行比较,并更改增量。

我满足了第一个条件--只有一个内环。但如果不使用行长,我就无法做到这一点。

,我们如何在不找出行长的情况下打印它?

许多答案是可以接受的,但我不得不选择一个,选择一个对我来说最简单的答案。

EN

回答 4

Stack Overflow用户

发布于 2013-02-26 12:15:17

不如:

代码语言:javascript
复制
    int start = 9;
    for (int i = 0; i <= start; i++) {
        StringBuilder sb = new StringBuilder((start - i) + " ");
        for (int j = start - i; j < start; j++) {
            sb.insert(0, (j + 1) + " ");
            sb.append((j + 1) + " ");
        }
        System.out.println(sb.toString());
    }
票数 2
EN

Stack Overflow用户

发布于 2013-02-26 12:17:42

这是简单的PHP,希望逻辑清晰且易于移植到Java:

代码语言:javascript
复制
$rowCount = 10;
$startNum = 9;

for ($idx =0; $idx <$rowCount; $idx ++) {

    for ($jdx=0; $jdx < (2*$idx +1); $jdx++) {

        if ($idx < $jdx)
            echo $startNum -(2*$idx) + $jdx.' ';
        else
            echo $startNum - $jdx.' ';
    }
    echo '<br/>';
}
票数 1
EN

Stack Overflow用户

发布于 2013-02-26 15:29:56

代码语言:javascript
复制
public class Pyramid {
    public static void main(String[] args) {
        int start = 9;
        String left = "";
        String right = "";
        for (int i=start; i>=0; i--) {
            System.out.println(left+i+right);
            left = left+i;
            right = i+right;
        }
    }
}

样本输出:

代码语言:javascript
复制
9
989
98789
9876789
987656789
98765456789
9876543456789
987654323456789
98765432123456789
9876543210123456789

这个迭代解等价于递归解。我更喜欢使用迭代而不是递归,因为当行数增加时,递归解决方案所需的额外堆栈内存可能很大。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15088582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档