您好,登錄后才能下訂單哦!
楊輝三角
的一些理解:
感覺楊輝三角的實現至少在前兩行是特殊的。在后面的幾行代碼中我是這樣想的,可以用第n項加第n+1項。兩邊再加上1就可以了罷。兩邊如果都這么做的話可以實現對稱的操作。
讓我們來實現吧。在實現的過程中想套用一層循環發現難以實現,用兩層試試看。
yh=[[1],[1,1]]
for i in range(2,6):
line=[1]
ls=yh[i-1]
for j in range(len(ls)-1):
line.append(ls[j]+ls[j+1])
line.append(1)
yh.append(line)
print(yh)
#打印n行的楊輝三角
a=int(input('請輸入第幾行'))
y=[[1],[1,1]]
for i in range(a-2):
n=y[i+1]
long=len(n)
line=[1]
for j in range(long-1):
line.append(n[j]+n[j+1])
line.append(1)
y.append(line)
print(line)
關于補零的一些想法,在楊輝三角當中,可以將左右兩邊當成多了一個零,在進入下一行的時候就可以看成0+1=1,同理右邊也是一樣,在實際寫代碼中,開始確實是左邊多一個[0]
,右邊多一個[0],但實際操作下來,左邊的[0]可以省去,因為在python當中是有獨特的負索引機制,在右邊的最后一項可以看做是[-1]項,這樣從0開始迭代的話可以從i-1開始
迭代,是一個python的獨特思想。
y=[[1]]
for i in range(1,6):
n=y[i-1]+[0]
l=[]
for j in range (i+1):
l.append(n[j-1]+n[j])
y.append(l)
print(y)
如果用獨特的負索引的話,用對稱性也是可以做出來的也是從-1項開始做起一直做到中間,這就需要在一開始的時候就創建一個剛剛好的列表空間,然后將元素一個一個填充進去
,這種方法就叫做對稱法
y=[[1]]
for i in range(5):
n=y[i]+[0]
line=[1]*(i+2)
for j in range((i+2)//2+1):
line[j]=n[j-1]+n[j]
line[-j-1]=line[j]
y.append(line)
print(y)
其實有這個想法之后實現代碼并不困難,其實這種方法只是一種思想,這更多是為最后一種方法鋪路,前面三種方法可以看出都是引用一個新列表然后將新列表填充到舊列表當中,如果將舊列表直接copy一個新列表這樣可以省去許多冗余量,我們稱這第四種方法為單列覆蓋法。
y=[1]*6
for i in range(6):
long=6-i
tmp=1
for j in range (1,i//2+1):
val=y[j]+tmp
tmp=y[j]
y[j]=val
y[-long-1]=val
print(y[:i+1])
在這里引用了一個中間變量tmp因為如果不引用的話會造成數據覆蓋,會有人在實際操作中會判斷是奇數列還是偶數列,但是我們在實驗中可以看到其實判斷是多余的,因為完全可以在多余列覆蓋即可。
到現在楊輝三角就差不多完成了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。