從網路課程 程式必修課!離散數學與演算法 來淺嚐一下沒機會在課堂上所學的離散數學與演算法。或許對撰寫程式的效能提昇會有些幫助。
課程相關資訊
[連結]:https://hiskio.com/courses/1196/lectures/133807
本篇範圍:Chapter 8
請注意:本系列文章為個人對應課程的消化吸收後,所整理出來的內容。換言之,並不一定會包含全部的課程內容,也有可能會添加其他資源來說明。
內容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
function getPascalRow(n) { let currentRow = [1] // 初始為第 0 列:[1] let innerSums = [] // 暫存下一列的中間值(不包含左右兩側的 1) let rowIndex = 1 // 從第 1 列開始計算 while (rowIndex <= n) { // 新的一列 = 1 + 上一列中間值 + 1,例如 [1] + [2,1] + [1] → [1,2,1] currentRow = [1].concat(innerSums).concat([1]) // 清空 innerSums,準備計算下一列的中間值 innerSums = [] for (let i = 0; i < currentRow.length - 1; i++) { innerSums.push(currentRow[i] + currentRow[i + 1]) } rowIndex++ } return currentRow } // getPascalRow(0) -> [1] console.log(getPascalRow(0)) // getPascalRow(1) -> [1, 1] console.log(getPascalRow(1)) // getPascalRow(2) -> [1, 2, 1] console.log(getPascalRow(2)) // getPascalRow(3) -> [1, 3, 3, 1] console.log(getPascalRow(3)) // getPascalRow(4) -> [1, 4, 6, 4, 1] console.log(getPascalRow(4)) |