给定一个数字n ,编写一个程序来打印一个有2n行的菱形。
例子 :
# Python program to
# print Diamond shape
# Function to print
# Diamond shape
def Diamond(rows):
n = 1
for i in range(1, rows + 1):
# loop to print spaces
for j in range (1, (rows - i) + 1):
print(end = " ")
# loop to print star
while n != (i+1):
print("*", end = " ")
n = n + 1
n = 1
# line break
print()
k = 0
n = 0
for i in range(1, rows + 1):
# loop to print spaces
for j in range (1, k + 1):
print(end = " ")
k = k + 1
# loop to print star
while n <= (rows - i):
print("*", end = " ")
n = n + 1
n = 0
print()
# Driver Code
# number of rows input
rows = 5
Diamond(rows)
输出
*
* *
* * *
* * * *
* * * * *
* * * * *
* * * *
* * *
* *
*
时间复杂度: O(n*n),因为我们正在遍历网格的行和列来打印空格 ' '和星号 '*'。
辅助空间: O(1),不使用额外空间。
方法 2:使用递归解决问题
下面是上述方法的实现:
def gotonextLine(k, i, z):
# base case
if (k == i):
return
print("* ", end=""),
gotonextLine(k + z, i, z)
# print blank space of diamond
def addblankSpaceInDiamond(j,i,z):
if (j == i):
return
print(" ",end=""),
addblankSpaceInDiamond(j + z, i, z)
def upperDiamond(row,i):
# base case
if (i > row):
return
addblankSpaceInDiamond(row, i, -1)
gotonextLine(0, i, 1)
print("\n",end=""),
upperDiamond(row, i + 1) # recursive call
def lowerDiamond(row,i):
# print the next line of diamond
if (i > row): # base case
return
addblankSpaceInDiamond(0, i, 1)
gotonextLine(row, i, -1)
print("\n",end=""),
lowerDiamond(row, i + 1)
# Code
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),额外的空间用于递归调用堆栈。