經典演算法(5)楊輝三角
寫在前面: 我是 揚帆向海,這個暱稱來源於我的名字以及女朋友的名字。我熱愛技術、熱愛開源、熱愛程式設計。
技術是開源的、知識是共享的
。
這部落格是對自己學習的一點點總結及記錄,如果您對 Java、演算法 感興趣,可以關注我的動態,我們一起學習。
用知識改變命運,讓我們的家人過上更好的生活
。
一、楊輝三角的介紹
百度百科對於楊輝三角是這樣介紹的:
二、楊輝三角的演算法思想
(此圖片來源於網路)
楊輝三角的兩個腰邊的數都是 1,從第3行起,除第一個數和最後一個數外,其它位置的數都是上頂上兩個數之和。
三、程式碼實現
1.第一種寫法
public class YangHuiTriangle1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("輸入要列印的行數:");
int n = scanner.nextInt();
// 列印楊輝三角
getTriangle(n);
}
/**
* 列印楊輝三角
*
* @param n 要列印的行數
* @return
*/
private static int[][] getTriangle(int n) {
// 建立一個二維陣列,此二維陣列用來存放楊輝三角中每一行的值
int[][] array = new int[n][n];
// 給陣列元素賦值
for (int i = 0; i < array.length; i++) {
// 每一行的值
array[i] = new int[i + 1];
// 給首末元素賦值
array[i][0] = array[i][i] = 1;
// 給每行的非首末元素賦值
if (i > 1) {
for (int j = 1; j < array[i].length - 1; j++) {
array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
}
}
}
// 遍歷二維陣列
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + "\t");
}
System.out.println();
}
return array;
}
}
程式碼執行結果:
輸入要列印的行數:10
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
2.第二種寫法
public class YangHuiTriangle2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("輸入要列印的行數:");
int n = scanner.nextInt();
// 列印楊輝三角
int array[][] = getTriangle(n);
// 列印成等腰三角形
printTriangle(array);
}
private static int[][] getTriangle(int n) {
// 建立一個二維陣列,此二維陣列用來存放楊輝三角中每一行的值
int[][] array = new int[n][n];
// 給陣列元素賦值
for (int i = 0; i < array.length; i++) {
// 每一行的值
array[i] = new int[i + 1];
// 給首末元素賦值
array[i][0] = array[i][i] = 1;
// 給每行的非首末元素賦值
if (i > 1) {
for (int j = 1; j < array[i].length - 1; j++) {
array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
}
}
}
return array;
}
/**
* 列印成等腰三角形
*
* @param array
*/
public static void printTriangle(int[][] array) {
for (int i = 0; i < array.length; i++) {
// 輸出楊輝三角數字前面的空格
for (int j = 0; j < array.length - 1 - i; j++) {
System.out.print(" ");
}
for (int j = 0; j <= i; j++) {
// 用空格填補空位置
System.out.print(" ");
// 以十進位制整數的形式輸出,位寬是3,左對齊
System.out.printf("%-3d", array[i][j]);
}
System.out.println();
}
}
}
程式碼執行結果:
輸入要列印的行數:
10
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
上一篇 經典演算法(4)一文搞懂什麼是 快速排序
下一篇 經典演算法(6)斐波拉契數列、兔子繁殖、跳臺階演算法
由於水平有限,本部落格難免有不足,懇請各位大佬不吝賜教!
相關文章
- Python楊輝三角演算法Python演算法
- java楊輝三角Java
- 08_楊輝三角
- 楊輝三角形
- 楊輝三角列印10行
- 前端演算法題:JS遞迴實現楊輝三角前端演算法JS遞迴
- 楊輝三角的5個特性,一個比一個牛皮!
- Golang 遞迴列印楊輝三角Golang遞迴
- js中實現楊輝三角JS
- Java基礎——列印楊輝三角Java
- 使用指令碼列印楊輝三角指令碼
- c語言筆記:楊輝三角C語言筆記
- 使用佇列實現楊輝三角佇列
- 杭電OJ 2032楊輝三角
- 經典演算法演算法
- 佇列(楊輝三角)——鏈式佇列佇列
- 【Python】生成器和楊輝三角Python
- 楊輝三角與陣列遞迴累加陣列遞迴
- Lisp經典演算法Lisp演算法
- 使用python生成楊輝三角形Python
- LeetCode 118. 楊輝三角LeetCode
- Pascal's Triangle leetcode java(楊輝三角)LeetCodeJava
- 白話經典演算法演算法
- leetcode第一百一十九題:楊輝三角ⅡLeetCode
- leedcode每日一題:118. 楊輝三角每日一題
- POJ3187Backward Digit Sums[楊輝三角]Git
- 楊輝三角形 (用陣列和遞迴)陣列遞迴
- 機器學習經典演算法之EM機器學習演算法
- 機器學習經典演算法之KNN機器學習演算法KNN
- 經典機器學習演算法總結機器學習演算法
- Python經典演算法片段Python演算法
- 經典演算法之快速排序演算法排序
- 經典演算法之回溯法演算法
- [經典排序演算法][集錦]排序演算法
- 經典演算法面試題(二)演算法面試題
- 經典排序演算法回顧:排序演算法
- 領釦LintCode演算法問題答案-1354. 楊輝三角形II演算法
- 演算法競賽入門經典_5 c++與STL入門演算法C++