给定一个数字n ,编写一个程序来打印一个有2n行的菱形。
例子 :
// C# Code to print
// the diamond shape
using System;
class GFG
{
// Prints diamond pattern
// with 2n rows
static void printDiamond(int n)
{
int space = n - 1;
// run loop (parent loop)
// till number of rows
for (int i = 0; i < n; i++)
{
// loop for initially space,
// before star printing
for (int j = 0; j < space; j++)
Console.Write(" ");
// Print i+1 stars
for (int j = 0; j <= i; j++)
Console.Write("* ");
Console.Write("\n");
space--;
}
// Repeat again in
// reverse order
space = 0;
// run loop (parent loop)
// till number of rows
for (int i = n; i > 0; i--)
{
// loop for initially space,
// before star printing
for (int j = 0; j < space; j++)
Console.Write(" ");
// Print i stars
for (int j = 0; j < i; j++)
Console.Write("* ");
Console.Write("\n");
space++;
}
}
// Driver Code
public static void Main()
{
printDiamond(5);
}
}
// This code is contributed
// by Smitha Semwal.
输出
*
* *
* * *
* * * *
* * * * *
* * * * *
* * * *
* * *
* *
*
时间复杂度: O(n*n),因为我们正在遍历网格的行和列来打印空格 ' '和星号 '*'。
辅助空间: O(1),不使用额外空间。
方法 2:使用递归解决问题
下面是上述方法的实现:
using System;
public class GFG{
public static void gotonextLine(int k, int i, int z)
{
if (k == i) // base case
return;
Console.Write("* ");
gotonextLine(k + z, i, z);
}
public static void addblankSpaceInDiamond(
int j, int i, int z) // print blank space of diamond
{
if (j == i)
return;
Console.Write(" ");
addblankSpaceInDiamond(j + z, i, z);
}
public static void upperDiamond(int row, int i)
{
if (i > row) // base case
return;
addblankSpaceInDiamond(row, i, -1);
gotonextLine(0, i, 1);
Console.Write("\n");
upperDiamond(row, i + 1); // recursive call
}
public static void lowerDiamond(int row,
int i) // print the next line of diamond
{
if (i > row) // base case
return;
addblankSpaceInDiamond(0, i, 1);
gotonextLine(row, i, -1);
Console.Write("\n");
lowerDiamond(row, i + 1);
}
public static void Main ()
{
// Code
int row;
row = 5;
upperDiamond(row, 0); // print upper part of triangle
lowerDiamond(row, 1); // print lower part of diamond
}
}
// This code is contributed by akashish__
输出
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
时间复杂度: O(N 2 ),因为我们要遍历网格的行和列来打印空格 ' ' 和星号 '*'。
辅助空间: O(N),额外的空间用于递归调用堆栈。