给定一个数字n ,编写一个程序来打印一个有2n行的菱形。
例子 :
// C++ program to print diamond shape
// with 2n rows
#include <bits/stdc++.h>
using namespace std;
// Prints diamond pattern with 2n rows
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++)
cout << " ";
// Print i+1 stars
for (int j = 0; j <= i; j++)
cout << "* ";
cout << endl;
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++)
cout << " ";
// Print i stars
for (int j = 0;j < i;j++)
cout << "* ";
cout << endl;
space++;
}
}
// Driver code
int main()
{
printDiamond(5);
return 0;
}
// This is code is contributed
// by rathbhupendra
输出
*
* *
* * *
* * * *
* * * * *
* * * * *
* * * *
* * *
* *
*
时间复杂度: O(n*n),因为我们正在遍历网格的行和列来打印空格 ' '和星号 '*'。
辅助空间: O(1),不使用额外空间。
方法 2:使用递归解决问题
下面是上述方法的实现:
// C++ program to print diamond pattern using recursion
#include <bits/stdc++.h>
using namespace std;
void gotonextLine(int k, int i, int z)
{
if (k == i) // base case
return;
cout << "* ";
gotonextLine(k + z, i, z);
}
void addblankSpaceInDiamond(
int j, int i, int z) // print blank space of diamond
{
if (j == i)
return;
cout << " ";
addblankSpaceInDiamond(j + z, i, z);
}
void upperDiamond(int row, int i)
{
if (i > row) // base case
return;
addblankSpaceInDiamond(row, i, -1);
gotonextLine(0, i, 1);
cout << endl;
upperDiamond(row, i + 1); // recursive call
}
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);
cout << endl;
lowerDiamond(row, i + 1);
}
int main()
{
int row;
row = 5;
upperDiamond(row, 0); // print upper part of triangle
lowerDiamond(row, 1); // print lower part of diamond
return 0;
// this code is contributed by Shivesh Kumar Dwivedi
}
输出
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
时间复杂度: O(N 2 ),因为我们要遍历网格的行和列来打印空格 ' ' 和星号 '*'。
辅助空间: O(N),额外的空间用于递归调用堆栈。