首先我們先看一下楊輝三角長什麼樣子
[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 刪除系統自帶的...