这其实是个面试问题。我不得不使用Java打印以下内容:
9
9 8 9
9 8 7 8 9
9 8 7 6 7 8 9
. . .
. . .在采访中,我写了一段令人尴尬的代码,但它仍然有效--使用外部循环,两个内环(一个用于递减序列,另一个用于递增序列!)还有一大堆变数。其中一个变量是每一行的长度。
面试官让我试着用
注:在看完答案后,我认为面试官并不是说第二个条件。他可能只是想让我简化我的代码,而第二点只是他口齿不清的地方。
所以,回家后,我找到了这个:
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值来确定是增加还是减少。对于每一行,我将当前索引与行的中点进行比较,并更改增量。
我满足了第一个条件--只有一个内环。但如果不使用行长,我就无法做到这一点。
,我们如何在不找出行长的情况下打印它?
许多答案是可以接受的,但我不得不选择一个,选择一个对我来说最简单的答案。
发布于 2013-02-26 12:15:17
不如:
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());
}发布于 2013-02-26 12:17:42
这是简单的PHP,希望逻辑清晰且易于移植到Java:
$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/>';
}发布于 2013-02-26 15:29:56
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;
}
}
}样本输出:
9
989
98789
9876789
987656789
98765456789
9876543456789
987654323456789
98765432123456789
9876543210123456789这个迭代解等价于递归解。我更喜欢使用迭代而不是递归,因为当行数增加时,递归解决方案所需的额外堆栈内存可能很大。
https://stackoverflow.com/questions/15088582
复制相似问题