資料結構演算法,手把手教你怎麼列印楊輝三角

2021-10-05 06:12:11 字數 3343 閱讀 4363

首先我們先看一下楊輝三角長什麼樣子

[1]

,[1,

1],[

1,2,

1],[

1,3,

3,1]

,[1,

4,6,

4,1]

以此類推.

..

不難發現,觀察後可以得出以下結論:

1.兩邊都是數字"1"

2.從第三行開始,除了兩邊的數字"1"之外的數字都是由"肩膀上"的數字相加得到的。

對於一些對演算法不太熟悉的人,如果直接去列印,可能就比較困難,所以我們不妨拆開幾步來做。

這是比較簡單的,第一行是1個數字,第二行是2個數字,第三行是3個數字,以此類推,我們可以歸納得到這樣乙個規律:第n行有n個數字。於是很容易我們就可以寫出以下**:

public

class

main

public list

>

generate

(int numrows)

list

> linkedlist =

newlinkedlist

<

>()

;//行數

for(

int i =

1; i <= numrows; i++

) linkedlist.

add(list);}

return linkedlist;

}

呼叫main方法我們可以在控制台看到以下輸出:

[[0

],[0

,0],

[0,0

,0],

[0,0

,0,0

],[0

,0,0

,0,0

]]

這裡已經可以看出我們獲得了乙個都是"0"的三角形了!只是列印出來不好看,所以我們再寫乙個方法,遍歷一下這個集合,列印得更好看一點。沒什麼技術含量,可以照抄,**如下:

public

static

void

printgenerate

(list

> list)

list

integers = list.

get(i)

;for

(integer integer : integers)

//換行

system.out.

println()

;}}

然後執行一下,我們就可以看到乙個很漂亮的三角形。但是這只是第一步。

000

0000

0000

0000

這個其實很簡單,只需要把每一列的第乙個和最後乙個換成1,其他的不變即可。**如下:

public list

>

generate

(int numrows)

list

> linkedlist =

newlinkedlist

<

>()

;for

(int i =

1; i <= numrows; i++

)else

} linkedlist.

add(list);}

return linkedlist;

}

於是我們就可以列印出這樣子的三角形:

111

1011

0011

0001

分析發現:

[1]

, 第1行 0

<

--對應的索引值

[1,1]

, 第2行 01[

1,2,

1], 第3行 012

[1,3

,3,1

], 第4行 012

3[1,

4,6,

4,1] 第5行 012

34

第三行的"2"是當前集合索引是[1]的值,是由第二行(上乙個集合)索引是[0]的值"1"索引是[1]的值"1"相加得到的。

第四行的第1個"3"是當前集合索引是[1]的值,是由第三行(上乙個集合)索引是[0]的值"1"和索引是[1]的值"2"相加得到的。第2個"3"是當前集合索引是[2]的值,是由第三行(上乙個集合)索引是[1]的值和索引是[2]的值相加得到的。

以此類推,我們可以得到這樣乙個結論:

除了首位和末尾的值以外,第n行的索引值為[ j ]的值是由第n-1行的索引值為[ j-1 ]和[ j ]相加得到。

所以我們可以判斷從第3行開始,獲取上一行的集合,然後除了首位和末尾的數值外(在第二步已經做了處理了),其他的數值都是上一行索引值為[ j-1 ]和[ j ]的值相加而成的。

public list

>

generate

(int numrows)

list

> linkedlist =

newlinkedlist

<

>()

; list

prelist = null;

for(

int i =

1; i <= numrows; i++

)for

(int j =

0; j < i; j++)}

} linkedlist.

add(list);}

return linkedlist;

}

於是就寫完了,我們可以列印出來看看結果:

111

1211

3311

4641

如果輸入的行數比較多,數字列印出來不對稱,比如以下這樣:

111

1211

3311

4641

15101051

161520156

11721

3535217

11828

5670

562881

193684

126126

8436

91

手把手教你學Python之迴圈結構

目錄 while迴圈 for迴圈 迴圈結構巢狀 迴圈結構主要用於需要重複執行某些操作的場景,通過迴圈可以大大降低開發人員的工作量,也是利用程式提公升工作效率的優勢之一。對於迴圈,主要把握以下幾點 什麼時候開始執行迴圈?什麼時候迴圈結束?需要重複操作的內容是什麼?每次操作後,有什麼變化?等。pytho...

手把手教你學Python 的迴圈結構

1 while else 迴圈 當while迴圈正常執行完的情況下,執行else輸出,如果while迴圈中執行了跳出迴圈的語句,比如 break,將不執行else 塊的內容。2 for 迴圈 for迴圈是迭代迴圈,在python中相當於乙個通用的序列迭代器,可以遍歷任何有序序列,如str list ...

手把手教你安裝mysql資料庫

1 需要安準wget命令,可參考另一篇文章。傳送門 2 更換yum源,這裡用阿里的,請參考阿里yum源 1 檢查系統是否安裝其他版本mysql,執行命令 yum list installed grep mysql 我這裡沒有安裝,所以什麼也沒有,如果有其他版本,需要刪除,防止衝突 2 刪除系統自帶的...