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