杨辉三角本质可以看为一个以对角线为轴一少半是0的矩阵。
既然是矩阵,可以获取输入中行秩列秩中较大的进行杨辉三角的初始化,这样就会永远包裹输入。
初始化之后就是根据输入的行列进行遍历取出对应的值。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>杨辉三角</title> </head>
<body> <div> 请输入行数和列数(用空格隔开): <input type="text" id="numInput"> </div> <div> <button onclick="calc()">得出结果</button> <span id="result"></span> </div> <script> let numInput = document.querySelector('#numInput'); let resultEle = document.querySelector('#result'); let returnMax = (a, b) => a > b ? a : b; let calc = () => { let row = parseInt(numInput.value.split(' ')[0]) || null; let col = parseInt(numInput.value.split(' ')[1]) || null; if (!row || !col) return alert('请输入必填项'); if (row < col) return alert('行必须大于列'); let yanghuiMat = []; for (let a = 0; a <= returnMax(row, col); a++) { yanghuiMat[a] = []; for (let b = 0; b <= returnMax(row, col); b++) { if (a === b) { yanghuiMat[a][b] = 1 } else if (a < b) { yanghuiMat[a][b] = 0 } else { yanghuiMat[1][0] = 1 yanghuiMat[a][0] = 1 yanghuiMat[a][b] = yanghuiMat[a - 1][b - 1] + yanghuiMat[a - 1][b] } } } resultEle.innerText = yanghuiMat[row - 1][col - 1]; } </script> </body>
</html>
|