標籤:帕斯卡 演算法 面試 java
【119-Pascal’s Triangle II(帕斯卡三角形(楊輝三角)II)】
【LeetCode-面試演算法經典-Java實現】【所有題目目錄索引】
原題
Given an index k, return the kth row of the Pascal’s triangle.
For example, given k = 3,
Return [1,3,3,1].
Note:
Could you optimize your algorithm to use only O(k) extra space?
題目大意
給定一個正整數k,求帕斯卡的第k行。
解題思路
對任意的n>0有
f(1, n)=1,(n>0)
f(n, n)=1,(n>2)
f(i,j) = f(i-1, j-1)+f(i, j-1),i>2,j>2,
求第k行。
代碼實現
演算法實作類別
import java.util.*;public class Solution { public List<Integer> getRow(int rowIndex) { rowIndex++; // 第rowIndex的實質資料數目 if (rowIndex < 0) { return null; } List<Integer> result = new ArrayList<>(rowIndex); if (rowIndex >= 1) { result.add(1); } if (rowIndex >= 2) { result.add(1); } int line = 0; // 記錄當前使用哪一行 int prev; // 上一行是哪一行 if (rowIndex >= 3) { int[][] data = new int[2][rowIndex]; // 【1】 data[0][0] = 1; data[1][0] = 1; data[1][1] = 1; for (int i = 2; i < rowIndex; i++) { line = i % 2; // 新計算的資料儲存在第0或者第1行 prev = (i - 1 + 2) % 2;// data[line][0] = 1; // 設定第一個數字,可以不用,【1】處已經進行了,data[x][0]總為1 for (int j = 1; j < i; j++) { data[line][j] = data[prev][j - 1] + data[prev][j]; } data[line][i] = 1; // 設定最後一個數 } // result.clear(); for (int i = 0; i < rowIndex; i++) { result.add(data[line][i]); } } return result; }}
評測結果
點擊圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中查看完整圖片。
特別說明
歡迎轉載,轉載請註明出處【http://blog.csdn.net/derrantcm/article/details/47589235】
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
【LeetCode-面試演算法經典-Java實現】【119-Pascal's Triangle II(帕斯卡三角形(楊輝三角)II)】